aGrUM  0.14.2
IPRMFactory.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005 by Christophe GONZALES and Pierre-Henri WUILLEMIN *
3  * {prenom.nom}_at_lip6.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
27 #ifndef GUM_IPRM_FACTORY_H
28 #define GUM_IPRM_FACTORY_H
29 
30 #include <iostream>
31 #include <limits>
32 #include <sstream>
33 #include <string>
34 #include <vector>
35 
36 #include <agrum/agrum.h>
37 
38 #include <agrum/core/hashTable.h>
41 
42 #include <agrum/PRM/PRM.h>
43 #include <agrum/PRM/utils_prm.h>
44 
45 namespace gum {
46 
47  namespace prm {
54  struct IPRMFactory {
55  virtual ~IPRMFactory(){};
56 
57  // virtual PRM<GUM_SCALAR>* prm() const=0;
58  virtual PRMObject::prm_type currentType() const = 0;
59  virtual PRMObject* getCurrent() = 0;
60  virtual const PRMObject* getCurrent() const = 0;
61  virtual PRMObject* closeCurrent() = 0;
62  virtual std::string currentPackage() const = 0;
63  // Class<GUM_SCALAR>& retrieveClass ( const std::string& name )=0;
64  // PRMType& retrieveType ( const std::string& name )=0;
65  // PRMType& retrieveCommonType ( const
66  // std::vector<PRMClassElement<GUM_SCALAR>*>& elts )=0;
67  virtual void pushPackage(const std::string& name) = 0;
68  virtual std::string popPackage() = 0;
69  virtual void addImport(const std::string& name) = 0;
70  virtual void startDiscreteType(const std::string& name,
71  std::string super = "") = 0;
72  virtual void addLabel(const std::string& l, std::string extends = "") = 0;
73  virtual void endDiscreteType() = 0;
74  virtual void startDiscretizedType(const std::string& name) = 0;
75  virtual void addTick(double tick) = 0;
76  virtual void endDiscretizedType() = 0;
77  virtual void
78  addRangeType(const std::string& name, long minVal, long maxVal) = 0;
79  virtual void startClass(const std::string& c,
80  const std::string& extends = "",
81  const Set< std::string >* implements = nullptr,
82  bool delayInheritance = false) = 0;
83  virtual void continueClass(const std::string& c) = 0;
84  virtual void endClass(bool checkImplementations = true) = 0;
85  virtual void startInterface(const std::string& i,
86  const std::string& extends = "",
87  bool delayInheritance = false) = 0;
88  virtual void continueInterface(const std::string& name) = 0;
89  virtual void addAttribute(const std::string& type,
90  const std::string& name) = 0;
91  virtual void endInterface() = 0;
92  // virtual void addAttribute ( PRMAttribute<GUM_SCALAR>* attr ) =0;
93  virtual void startAttribute(const std::string& type,
94  const std::string& name,
95  bool scalar_attr = false) = 0;
96  virtual void continueAttribute(const std::string& name) = 0;
97  virtual void addParent(const std::string& name) = 0;
98  virtual void setRawCPFByFloatLines(const std::vector< float >& array) = 0;
99  virtual void setRawCPFByFloatColumns(const std::vector< float >& array) = 0;
100  virtual void setCPFByFloatRule(const std::vector< std::string >& labels,
101  const std::vector< float >& values) = 0;
102  virtual void setCPFByRule(const std::vector< std::string >& labels,
103  const std::vector< std::string >& values) = 0;
104  virtual void setRawCPFByColumns(const std::vector< std::string >& array) = 0;
105  virtual void setRawCPFByLines(const std::vector< std::string >& array) = 0;
106  virtual void endAttribute() = 0;
107  virtual void addParameter(const std::string& type,
108  const std::string& name,
109  double value) = 0;
110  virtual void addAggregator(const std::string& name,
111  const std::string& agg_type,
112  const std::vector< std::string >& chains,
113  const std::vector< std::string >& params,
114  std::string type = "") = 0;
115  virtual void addNoisyOrCompound(const std::string& name,
116  const std::vector< std::string >& chains,
117  const std::vector< float >& numbers,
118  float leak,
119  const std::vector< std::string >& label) = 0;
120  virtual void addReferenceSlot(const std::string& type,
121  const std::string& name,
122  bool isArray) = 0;
123  virtual void startSystem(const std::string& name) = 0;
124  virtual void endSystem() = 0;
125  virtual void addInstance(const std::string& type,
126  const std::string& name) = 0;
127  virtual void addInstance(const std::string& type,
128  const std::string& name,
129  const HashTable< std::string, double >& params) = 0;
130  virtual void
131  addArray(const std::string& type, const std::string& name, Size size) = 0;
132  virtual void incArray(const std::string& l_i, const std::string& r_i) = 0;
133  virtual void setReferenceSlot(const std::string& left_instance,
134  const std::string& left_reference,
135  const std::string& right_instance) = 0;
136  virtual void setReferenceSlot(const std::string& l_i,
137  const std::string& r_i) = 0;
138 
139  virtual bool isClassOrInterface(const std::string& type) const = 0;
140  virtual bool isArrayInCurrentSystem(const std::string& name) const = 0;
141  };
142  } /* namespace prm */
143 } /* namespace gum */
144 
145 #endif /* GUM_IPRM_FACTORY_H */
virtual void setCPFByFloatRule(const std::vector< std::string > &labels, const std::vector< float > &values)=0
virtual void addAttribute(const std::string &type, const std::string &name)=0
virtual void endInterface()=0
virtual void startAttribute(const std::string &type, const std::string &name, bool scalar_attr=false)=0
Base class for discrete random variable.
Headers of MultiDimSparse.
Headers of PRM.
virtual void addInstance(const std::string &type, const std::string &name)=0
virtual void addTick(double tick)=0
virtual void setRawCPFByColumns(const std::vector< std::string > &array)=0
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
virtual void addNoisyOrCompound(const std::string &name, const std::vector< std::string > &chains, const std::vector< float > &numbers, float leak, const std::vector< std::string > &label)=0
virtual void addParameter(const std::string &type, const std::string &name, double value)=0
virtual PRMObject::prm_type currentType() const =0
virtual void addReferenceSlot(const std::string &type, const std::string &name, bool isArray)=0
virtual void endDiscretizedType()=0
virtual void endClass(bool checkImplementations=true)=0
prm_type
Enumeration of the different types of objects handled by a PRM.
Definition: PRMObject.h:66
virtual void endAttribute()=0
virtual PRMObject * closeCurrent()=0
virtual void startClass(const std::string &c, const std::string &extends="", const Set< std::string > *implements=nullptr, bool delayInheritance=false)=0
virtual std::string currentPackage() const =0
virtual void setReferenceSlot(const std::string &left_instance, const std::string &left_reference, const std::string &right_instance)=0
virtual void pushPackage(const std::string &name)=0
virtual void startInterface(const std::string &i, const std::string &extends="", bool delayInheritance=false)=0
virtual void addRangeType(const std::string &name, long minVal, long maxVal)=0
virtual void continueClass(const std::string &c)=0
virtual bool isClassOrInterface(const std::string &type) const =0
virtual void setCPFByRule(const std::vector< std::string > &labels, const std::vector< std::string > &values)=0
virtual void addAggregator(const std::string &name, const std::string &agg_type, const std::vector< std::string > &chains, const std::vector< std::string > &params, std::string type="")=0
virtual void setRawCPFByFloatLines(const std::vector< float > &array)=0
virtual ~IPRMFactory()
Definition: IPRMFactory.h:55
Abstract base class for any element defined in a PRM.
Definition: PRMObject.h:53
virtual std::string popPackage()=0
virtual void startDiscretizedType(const std::string &name)=0
virtual void continueInterface(const std::string &name)=0
virtual void startDiscreteType(const std::string &name, std::string super="")=0
virtual void setRawCPFByLines(const std::vector< std::string > &array)=0
virtual void addLabel(const std::string &l, std::string extends="")=0
virtual void addArray(const std::string &type, const std::string &name, Size size)=0
virtual void incArray(const std::string &l_i, const std::string &r_i)=0
virtual void endDiscreteType()=0
virtual void endSystem()=0
virtual void addImport(const std::string &name)=0
virtual void setRawCPFByFloatColumns(const std::vector< float > &array)=0
virtual void startSystem(const std::string &name)=0
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:45
virtual void continueAttribute(const std::string &name)=0
virtual bool isArrayInCurrentSystem(const std::string &name) const =0
virtual PRMObject * getCurrent()=0
Class hash tables iterators.
virtual void addParent(const std::string &name)=0
non-template interface-like parent for every PRM Factory
Definition: IPRMFactory.h:54