1 /** 2 * 3 * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU) 4 * info_at_agrum_dot_org 5 * 6 * This library is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this library. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 22 /** 23 * @file 24 * @brief Definition of classe for BN file output manipulation 25 * 26 * This class servers to write the content of a Bayesian network in 27 * the BN format. 28 * 29 * @author Lionel TORTI and Pierre-Henri WUILLEMIN(_at_LIP6) 30 */ 31 32 #ifndef GUM_NET_WRITER_H 33 #define GUM_NET_WRITER_H 34 35 #include <fstream> 36 #include <iostream> 37 #include <sstream> 38 #include <string> 39 40 #include <agrum/BN/io/BNWriter.h> 41 42 #include <agrum/agrum.h> 43 44 namespace gum { 45 46 /** 47 * @class NetWriter 48 * @headerfile netWriter.h <agrum/BN/io/net/netWriter.h> 49 * @brief Writes a IBayesNet in the BN format. 50 * @ingroup bn_io 51 * 52 * This class servers to write the content of a Bayesian network in 53 * the BN format. See 54 * TODO 55 * for information on this format. 56 * 57 */ 58 template < typename GUM_SCALAR > 59 class NetWriter: public BNWriter< GUM_SCALAR > { 60 public: 61 // ========================================================================== 62 /// @name Constructor & destructor 63 // ========================================================================== 64 /// @{ 65 66 /** 67 * Default constructor. 68 */ 69 NetWriter(); 70 71 /** 72 * Destructor. 73 */ 74 ~NetWriter(); 75 76 /// @} 77 78 /** 79 * Writes a Bayesian network in the output stream using the BN format. 80 * 81 * @param output The output stream. 82 * @param bn The Bayesian network writen in output. 83 * @throws IOError Raised if and I/O error occurs. 84 */ 85 void write(std::ostream& output, const IBayesNet< GUM_SCALAR >& bn) final; 86 87 /** 88 * Writes a Bayesian network in the referenced file using the BN format. 89 * If the files doesn't exists, it is created. 90 * 91 * @param filePath The path to the file used to write the Bayesian network. 92 * @param bn The Bayesian network writed in the file. 93 * @throws IOError Raised if and I/O error occurs. 94 */ 95 void write(const std::string& filePath, const IBayesNet< GUM_SCALAR >& bn) final; 96 97 private: 98 // Returns the header of the BN file. 99 std::string _header_(const IBayesNet< GUM_SCALAR >& bn); 100 101 // Returns a bloc defining a variable in the BN format. 102 std::string _variableBloc_(const DiscreteVariable& var); 103 104 // Returns a bloc defining a variable's CPT in the BN format. 105 std::string _variableCPT_(const Potential< GUM_SCALAR >& cpt); 106 107 // Returns the modalities labels of the variables in varsSeq 108 }; 109 110 111 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 112 extern template class NetWriter< double >; 113 #endif 114 115 } /* namespace gum */ 116 117 #include <agrum/BN/io/net/netWriter_tpl.h> 118 #endif // GUM_NET_WRITER_H 119