aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
O3prm.h
Go to the documentation of this file.
1 /**
2  *
3  * Copyright 2005-2020 Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@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 Headers for the AST of the O3PRM language.
25  *
26  * @author Christophe GONZALES(@AMU) and Pierre-Henri WUILLEMIN(@LIP6)
27  * @author Lionel TORTI
28  */
29 
30 #include <string>
31 #include <utility>
32 #include <vector>
33 
34 #include <agrum/agrum.h>
35 #include <agrum/tools/core/hashTable.h>
36 #include <agrum/tools/core/math/formula.h>
37 
38 #ifndef GUM_PRM_O3PRM_PRM_H
39 # define GUM_PRM_O3PRM_PRM_H
40 
41 namespace gum {
42  namespace prm {
43  namespace o3prm {
44 
45  /**
46  * @class O3Position
47  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
48  * @ingroup o3prm_group
49  *
50  * @brief The O3Position is part of the AST of the O3PRM language.
51  */
52  class O3Position {
53  public:
54  O3Position();
55  O3Position(const std::string& filename, int line, int column);
56  O3Position(const O3Position& src);
57  O3Position(O3Position&& src);
58  ~O3Position();
59 
60  O3Position& operator=(const O3Position& src);
62 
63  std::string& file();
64  const std::string& file() const;
65 
66  int& line();
67  int line() const;
68 
69  int& column();
70  int column() const;
71 
72  private:
73  std::string file__;
74  int line__;
75  int column__;
76  };
77 
78  /**
79  * @class O3Formula
80  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
81  * @ingroup o3prm_group
82  *
83  * @brief The O3Formula is part of the AST of the O3PRM language.
84  */
85  class O3Formula {
86  public:
87  O3Formula();
88  O3Formula(const O3Position& pos, const Formula& formula);
89  O3Formula(const O3Formula& src);
90  O3Formula(O3Formula&& src);
91  ~O3Formula();
92 
93  O3Formula& operator=(const O3Formula& src);
94  O3Formula& operator=(O3Formula&& src);
95 
97  const O3Position& position() const;
98 
99  Formula& formula();
100  const Formula& formula() const;
101 
102  private:
105  };
106 
107  /**
108  * @class O3Float
109  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
110  * @ingroup o3prm_group
111  *
112  * @brief The O3Float is part of the AST of the O3PRM language.
113  */
114  class O3Float {
115  public:
116  O3Float();
117  O3Float(const O3Position& pos, float value);
118  O3Float(const O3Float& src);
119  O3Float(O3Float&& src);
120  ~O3Float();
121 
122  O3Float& operator=(const O3Float& src);
123  O3Float& operator=(O3Float&& src);
124 
125  O3Position& position();
126  const O3Position& position() const;
127 
128  float& value();
129  float value() const;
130 
131  private:
133  float value__;
134  };
135 
136  /**
137  * @class O3Integer
138  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
139  * @ingroup o3prm_group
140  *
141  * @brief The O3Integer is part of the AST of the O3PRM language.
142  */
143  class O3Integer {
144  public:
145  O3Integer();
146  O3Integer(const O3Position& pos, int value);
147  O3Integer(const O3Integer& src);
148  O3Integer(O3Integer&& src);
149  ~O3Integer();
150 
151  O3Integer& operator=(const O3Integer& src);
152  O3Integer& operator=(O3Integer&& src);
153 
154  O3Position& position();
155  const O3Position& position() const;
156 
157  int& value();
158  int value() const;
159 
160  private:
162  int value__;
163  };
164 
165  /**
166  * @class O3Label
167  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
168  * @ingroup o3prm_group
169  *
170  * @brief The O3Label is part of the AST of the O3PRM language.
171  */
172  class O3Label {
173  public:
174  O3Label();
175  O3Label(const O3Position& pos, const std::string& label);
176  O3Label(const O3Label& src);
177  O3Label(O3Label&& src);
178  ~O3Label();
179 
180  O3Label& operator=(const O3Label& src);
181  O3Label& operator=(O3Label&& src);
182 
183  O3Position& position();
184  const O3Position& position() const;
185 
186  std::string& label();
187  const std::string& label() const;
188 
189  private:
191  std::string label__;
192  };
193 
194  std::ostream& operator<<(std::ostream& o, const O3Label& src);
195 
196  /**
197  * @class O3Type
198  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
199  * @ingroup o3prm_group
200  *
201  * @brief The O3Type is part of the AST of the O3PRM language.
202  */
203  class O3Type {
204  public:
205  using LabelPair = std::pair< O3Label, O3Label >;
207 
208  O3Type();
209  O3Type(const O3Type& src);
210  O3Type(O3Type&& src);
211  ~O3Type();
212 
213  O3Type& operator=(const O3Type& src);
214  O3Type& operator=(O3Type&& src);
215 
216  O3Position& position();
217  const O3Position& position() const;
218 
219  O3Label& name();
220  const O3Label& name() const;
221 
222  O3Label& superLabel();
223  const O3Label& superLabel() const;
224 
225  LabelMap& labels();
226  const LabelMap& labels() const;
227 
228  bool& deprecated();
229  const bool& deprecated() const;
230 
231  private:
237  };
238 
239  /**
240  * @class O3IntType
241  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
242  * @ingroup o3prm_group
243  *
244  * @brief The O3IntType is part of the AST of the O3PRM language.
245  */
246  class O3IntType {
247  public:
248  O3IntType();
249  O3IntType(const O3IntType& src);
250  O3IntType(O3IntType&& src);
251  ~O3IntType();
252 
253  O3IntType& operator=(const O3IntType& src);
254  O3IntType& operator=(O3IntType&& src);
255 
256  O3Position& position();
257  const O3Position& position() const;
258 
259  O3Label& name();
260  const O3Label& name() const;
261 
262  O3Integer& start();
263  const O3Integer& start() const;
264 
265  O3Integer& end();
266  const O3Integer& end() const;
267 
268  bool& deprecated();
269  const bool& deprecated() const;
270 
271  private:
277  };
278 
279  /**
280  * @class O3RealType
281  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
282  * @ingroup o3prm_group
283  *
284  * @brief The O3RealType is part of the AST of the O3PRM language.
285  */
286  class O3RealType {
287  public:
288  O3RealType();
289  O3RealType(const O3RealType& src);
290  O3RealType(O3RealType&& src);
291  ~O3RealType();
292 
293  O3RealType& operator=(const O3RealType& src);
294  O3RealType& operator=(O3RealType&& src);
295 
296  O3Position& position();
297  const O3Position& position() const;
298 
299  O3Label& name();
300  const O3Label& name() const;
301 
302  std::vector< O3Float >& values();
303  const std::vector< O3Float >& values() const;
304 
305  bool& deprecated();
306  const bool& deprecated() const;
307 
308  private:
313  };
314 
315  /**
316  * @class O3InterfaceElement
317  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
318  * @ingroup o3prm_group
319  *
320  * @brief The O3InterfaceElement is part of the AST of the O3PRM language.
321  */
323  public:
325  O3InterfaceElement(const O3Label& type, const O3Label& name, bool isArray);
329 
332 
333  O3Label& type();
334  const O3Label& type() const;
335 
336  O3Label& name();
337  const O3Label& name() const;
338 
339  bool& isArray();
340  bool isArray() const;
341 
342  private:
345  bool isArray__;
346  };
347 
348  /**
349  * @class O3Interface
350  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
351  * @ingroup o3prm_group
352  *
353  * @brief The O3Interface is part of the AST of the O3PRM language.
354  */
355  class O3Interface {
356  public:
358 
359  O3Interface();
360  O3Interface(const O3Interface& src);
361  O3Interface(O3Interface&& src);
362  ~O3Interface();
363 
364  O3Interface& operator=(const O3Interface& src);
366 
367  O3Position& position();
368  const O3Position& position() const;
369 
370  O3Label& name();
371  const O3Label& name() const;
372 
373  O3Label& superLabel();
374  const O3Label& superLabel() const;
375 
377  const O3InterfaceElementList& elements() const;
378 
379  private:
384  };
385 
386  /**
387  * @class O3Parameter
388  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
389  * @ingroup o3prm_group
390  *
391  * @brief The O3Parameter is part of the AST of the O3PRM language.
392  */
393  class O3Parameter {
394  public:
395  enum class PRMType
396  {
397  NONE,
398  INT,
399  FLOAT
400  };
401 
402  O3Parameter();
403  O3Parameter(const O3Position& pos,
404  const O3Label& name,
405  const O3Integer& value);
406  O3Parameter(const O3Position& pos,
407  const O3Label& name,
408  const O3Float& value);
409  O3Parameter(const O3Parameter& src);
410  O3Parameter(O3Parameter&& src);
411  ~O3Parameter();
412 
413  O3Parameter& operator=(const O3Parameter& src);
415 
416  PRMType& type();
417  PRMType type() const;
418 
419  O3Position& position();
420  const O3Position& position() const;
421 
422  O3Label& name();
423  const O3Label& name() const;
424 
425  O3Float& value();
426  const O3Float& value() const;
427 
428  private:
433  };
434 
435  /**
436  * @class O3ReferenceSlot
437  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
438  * @ingroup o3prm_group
439  *
440  * @brief The O3ReferenceSlot is part of the AST of the O3PRM language.
441  */
443  public:
444  O3ReferenceSlot();
445  O3ReferenceSlot(const O3Label& type, const O3Label& name, bool isArray);
446  O3ReferenceSlot(const O3ReferenceSlot& src);
448  ~O3ReferenceSlot();
449 
452 
453  O3Label& type();
454  const O3Label& type() const;
455 
456  O3Label& name();
457  const O3Label& name() const;
458 
459  bool& isArray();
460  bool isArray() const;
461 
462  private:
465  bool isArray__;
466  };
467 
468  /**
469  * @class O3Attribute
470  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
471  * @ingroup o3prm_group
472  *
473  * @brief The O3Attribute is part of the AST of the O3PRM language.
474  */
475  class O3Attribute {
476  public:
478 
479  O3Attribute();
480  O3Attribute(const O3Label& type,
481  const O3Label& name,
482  const O3LabelList& parents);
483  O3Attribute(const O3Attribute& src);
484  O3Attribute(O3Attribute&& src);
485  virtual ~O3Attribute();
486 
487  virtual O3Attribute& operator=(const O3Attribute& src);
488  virtual O3Attribute& operator=(O3Attribute&& src);
489 
490  virtual O3Label& type();
491  virtual const O3Label& type() const;
492 
493  virtual O3Label& name();
494  virtual const O3Label& name() const;
495 
496  virtual O3LabelList& parents();
497  virtual const O3LabelList& parents() const;
498 
499  virtual std::unique_ptr< O3Attribute > copy() const = 0;
500 
501  private:
505  };
506 
507  /**
508  * @class O3RawCPT
509  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
510  * @ingroup o3prm_group
511  *
512  * @brief The O3RawCPT is part of the AST of the O3PRM language.
513  */
514  class O3RawCPT: public O3Attribute {
515  public:
517 
518  O3RawCPT();
519  O3RawCPT(const O3Label& type,
520  const O3Label& name,
521  const O3Attribute::O3LabelList& parents,
522  const O3FormulaList& values);
523  O3RawCPT(const O3RawCPT& src);
524  O3RawCPT(O3RawCPT&& src);
525  ~O3RawCPT();
526 
527  virtual O3RawCPT& operator=(const O3RawCPT& src);
528  virtual O3RawCPT& operator=(O3RawCPT&& src);
529 
530  virtual O3FormulaList& values();
531  virtual const O3FormulaList& values() const;
532 
533  virtual std::unique_ptr< O3Attribute > copy() const;
534 
535  private:
537  };
538 
539  /**
540  * @class O3RuleCPT
541  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
542  * @ingroup o3prm_group
543  *
544  * @brief The O3RuleCPT is part of the AST of the O3PRM language.
545  */
546  class O3RuleCPT: public O3Attribute {
547  public:
552 
553  O3RuleCPT();
554  O3RuleCPT(const O3Label& type,
555  const O3Label& name,
556  const O3Attribute::O3LabelList& parents,
557  O3RuleList&& rules);
558  O3RuleCPT(const O3RuleCPT& src);
559  O3RuleCPT(O3RuleCPT&& src);
560  ~O3RuleCPT();
561 
562  virtual O3RuleCPT& operator=(const O3RuleCPT& src);
563  virtual O3RuleCPT& operator=(O3RuleCPT&& src);
564 
565  virtual O3RuleList& rules();
566  virtual const O3RuleList& rules() const;
567 
568  virtual std::unique_ptr< O3Attribute > copy() const;
569 
570  private:
572  };
573 
574  /**
575  * @class O3Aggregate
576  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
577  * @ingroup o3prm_group
578  *
579  * @brief The O3Aggregate is part of the AST of the O3PRM language.
580  */
581  class O3Aggregate {
582  public:
584 
585  O3Aggregate();
586  O3Aggregate(const O3Aggregate& src);
587  O3Aggregate(O3Aggregate&& src);
588  virtual ~O3Aggregate();
589 
590  O3Aggregate& operator=(const O3Aggregate& src);
592 
594  const O3Label& variableType() const;
595 
597  const O3Label& aggregateType() const;
598 
599  O3Label& name();
600  const O3Label& name() const;
601 
602  O3LabelList& parents();
603  const O3LabelList& parents() const;
604 
606  const O3LabelList& parameters() const;
607 
608  private:
614  };
615 
616  /**
617  * @class O3Class
618  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
619  * @ingroup o3prm_group
620  *
621  * @brief The O3Class is part of the AST of the O3PRM language.
622  */
623  class O3Class {
624  public:
630 
631  O3Class();
632  O3Class(const O3Class& src);
633  O3Class(O3Class&& src);
634  ~O3Class();
635 
636  O3Class& operator=(const O3Class& src);
637  O3Class& operator=(O3Class&& src);
638 
639  O3Position& position();
640  const O3Position& position() const;
641 
642  O3Label& name();
643  const O3Label& name() const;
644 
645  O3Label& superLabel();
646  const O3Label& superLabel() const;
647 
649  const O3LabelList& interfaces() const;
650 
652  const O3ParameterList& parameters() const;
653 
655  const O3ReferenceSlotList& referenceSlots() const;
656 
658  const O3AttributeList& attributes() const;
659 
661  const O3AggregateList& aggregates() const;
662 
663  private:
672  };
673 
674  /**
675  * @class O3Assignment
676  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
677  * @ingroup o3prm_group
678  *
679  * @brief The O3Assignment is part of the AST of the O3PRM language.
680  */
681  class O3Assignment {
682  public:
683  O3Assignment();
684  O3Assignment(const O3Assignment& src);
685  O3Assignment(O3Assignment&& src);
686  ~O3Assignment();
687 
688  O3Assignment& operator=(const O3Assignment& src);
690 
692  const O3Label& leftInstance() const;
693 
694  O3Integer& leftIndex();
695  const O3Integer& leftIndex() const;
696 
698  const O3Label& leftReference() const;
699 
701  const O3Label& rightInstance() const;
702 
704  const O3Integer& rightIndex() const;
705 
706  private:
712  };
713 
714  /**
715  * @class O3Increment
716  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
717  * @ingroup o3prm_group
718  *
719  * @brief The O3Increment is part of the AST of the O3PRM language.
720  */
721  class O3Increment {
722  public:
723  O3Increment();
724  O3Increment(const O3Increment& src);
725  O3Increment(O3Increment&& src);
726  ~O3Increment();
727 
728  O3Increment& operator=(const O3Increment& src);
730 
732  const O3Label& leftInstance() const;
733 
734  O3Integer& leftIndex();
735  const O3Integer& leftIndex() const;
736 
738  const O3Label& leftReference() const;
739 
741  const O3Label& rightInstance() const;
742 
744  const O3Integer& rightIndex() const;
745 
746  private:
752  };
753 
754  /**
755  * @class O3InstanceParameter
756  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
757  * @ingroup o3prm_group
758  *
759  * @brief The O3InstanceParameter is part of the AST of the O3PRM
760  * language.
761  */
763  public:
768 
771 
772  O3Label& name();
773  const O3Label& name() const;
774 
775  O3Float& value();
776  const O3Float& value() const;
777 
778  bool& isInteger();
779  bool isInteger() const;
780 
781  private:
785  };
786 
787  /**
788  * @class O3Instance
789  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
790  * @ingroup o3prm_group
791  *
792  * @brief The O3Instance is part of the AST of the O3PRM language.
793  */
794  class O3Instance {
795  public:
797 
798  O3Instance();
799  O3Instance(const O3Instance& src);
800  O3Instance(O3Instance&& src);
801  ~O3Instance();
802 
803  O3Instance& operator=(const O3Instance& src);
804  O3Instance& operator=(O3Instance&& src);
805 
806  O3Label& type();
807  const O3Label& type() const;
808 
809  O3Label& name();
810  const O3Label& name() const;
811 
812  O3Integer& size();
813  const O3Integer& size() const;
814 
816  const O3InstanceParameterList& parameters() const;
817 
818  private:
823  };
824 
825  /**
826  * @class O3System
827  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
828  * @ingroup o3prm_group
829  *
830  * @brief The O3System is part of the AST of the O3PRM language.
831  */
832  class O3System {
833  public:
837 
838  O3System();
839  O3System(const O3System& src);
840  O3System(O3System&& src);
841  ~O3System();
842 
843  O3System& operator=(const O3System& src);
844  O3System& operator=(O3System&& src);
845 
846  O3Label& name();
847  const O3Label& name() const;
848 
850  const O3InstanceList& instances() const;
851 
853  const O3AssignmentList& assignments() const;
854 
856  const O3IncrementList& increments() const;
857 
858  private:
863  };
864 
865  /**
866  * @class O3Import
867  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
868  * @ingroup o3prm_group
869  *
870  * @brief The O3Import is part of the AST of the O3PRM language.
871  */
872  class O3Import {
873  public:
874  O3Import();
875  O3Import(const O3Import& src);
876  O3Import(O3Import&& src);
877  ~O3Import();
878 
879  O3Import& operator=(const O3Import& src);
880  O3Import& operator=(O3Import&& src);
881 
882  O3Label& import();
883  const O3Label& import() const;
884 
885  private:
887  };
888 
889  /**
890  * @class O3PRM
891  * @headerfile O3prm.h <agrum/PRM/o3prm/O3prm.h>
892  * @ingroup o3prm_group
893  *
894  * @brief The O3PRM is part of the AST of the O3PRM language.
895  */
896  class O3PRM {
897  public:
905 
906  O3PRM();
907  O3PRM(const O3PRM& src);
908  O3PRM(O3PRM&& src);
909  ~O3PRM();
910 
911  O3PRM& operator=(const O3PRM& src);
912  O3PRM& operator=(O3PRM&& src);
913 
914  O3TypeList& types();
915  const O3TypeList& types() const;
916 
918  const O3IntTypeList& int_types() const;
919 
921  const O3RealTypeList& real_types() const;
922 
924  const O3InterfaceList& interfaces() const;
925 
926  O3ClassList& classes();
927  const O3ClassList& classes() const;
928 
930  const O3SystemList& systems() const;
931 
933  const O3ImportList& imports() const;
934 
935  private:
943  };
944 
945  } // namespace o3prm
946  } // namespace prm
947 } // namespace gum
948 
949 #endif // GUM_PRM_O3PRM_PRM_H
O3ReferenceSlot(const O3Label &type, const O3Label &name, bool isArray)
Definition: O3prm.cpp:966
virtual O3RuleCPT & operator=(const O3RuleCPT &src)
Definition: O3prm.cpp:749
O3RealType(O3RealType &&src)
Definition: O3prm.cpp:356
O3LabelList & parents()
Definition: O3prm.cpp:1067
virtual O3RuleCPT & operator=(O3RuleCPT &&src)
Definition: O3prm.cpp:757
O3ClassList & classes()
Definition: O3prm.cpp:502
std::unique_ptr< O3InterfaceElementList > elts__
Definition: O3prm.h:383
O3Class(O3Class &&src)
Definition: O3prm.cpp:814
O3ReferenceSlot & operator=(const O3ReferenceSlot &src)
Definition: O3prm.cpp:987
O3IncrementList & increments()
Definition: O3prm.cpp:1312
virtual O3LabelList & parents()
Definition: O3prm.cpp:667
const O3Integer & leftIndex() const
Definition: O3prm.cpp:1187
const O3IntTypeList & int_types() const
Definition: O3prm.cpp:490
const O3Float & value() const
Definition: O3prm.cpp:1360
virtual std::unique_ptr< O3Attribute > copy() const =0
std::unique_ptr< O3ParameterList > params__
Definition: O3prm.h:668
const O3Label & superLabel() const
Definition: O3prm.cpp:613
const bool & deprecated() const
Definition: O3prm.cpp:294
O3ReferenceSlot(O3ReferenceSlot &&src)
Definition: O3prm.cpp:979
O3IntTypeList int_types__
Definition: O3prm.h:937
virtual O3Attribute & operator=(O3Attribute &&src)
Definition: O3prm.cpp:653
O3Position & operator=(const O3Position &src)
Definition: O3prm.cpp:58
O3IntType(O3IntType &&src)
Definition: O3prm.cpp:304
std::unique_ptr< O3AggregateList > aggs__
Definition: O3prm.h:671
const O3Label & type() const
Definition: O3prm.cpp:1004
O3Formula(O3Formula &&src)
Definition: O3prm.cpp:177
O3Label(const O3Position &pos, const std::string &label)
Definition: O3prm.cpp:206
O3Position & position()
Definition: O3prm.cpp:606
The O3Increment is part of the AST of the O3PRM language.
Definition: O3prm.h:721
O3InstanceParameter & operator=(O3InstanceParameter &&src)
Definition: O3prm.cpp:1348
O3Position pos__
Definition: O3prm.h:190
O3Position & position()
Definition: O3prm.cpp:238
O3Position & position()
Definition: O3prm.cpp:290
O3Formula & operator=(const O3Formula &src)
Definition: O3prm.cpp:184
O3Attribute(const O3Attribute &src)
Definition: O3prm.cpp:632
const O3Label & leftInstance() const
Definition: O3prm.cpp:1183
virtual const O3FormulaList & values() const
Definition: O3prm.cpp:716
virtual O3RuleList & rules()
Definition: O3prm.cpp:765
O3Formula(const O3Formula &src)
Definition: O3prm.cpp:171
const O3InterfaceList & interfaces() const
Definition: O3prm.cpp:498
The O3InstanceParameter is part of the AST of the O3PRM language.
Definition: O3prm.h:762
const O3Integer & size() const
Definition: O3prm.cpp:1245
const O3Label & name() const
Definition: O3prm.cpp:1356
O3Increment & operator=(const O3Increment &src)
Definition: O3prm.cpp:1163
O3Increment(O3Increment &&src)
Definition: O3prm.cpp:1152
The O3Parameter is part of the AST of the O3PRM language.
Definition: O3prm.h:393
virtual const O3LabelList & parents() const
Definition: O3prm.cpp:668
O3InterfaceElement(O3InterfaceElement &&src)
Definition: O3prm.cpp:531
O3PRM & operator=(const O3PRM &src)
Definition: O3prm.cpp:448
The O3IntType is part of the AST of the O3PRM language.
Definition: O3prm.h:246
const O3Label & name() const
Definition: O3prm.cpp:282
O3RuleCPT(const O3RuleCPT &src)
Definition: O3prm.cpp:736
O3Label & name()
Definition: O3prm.cpp:281
O3Position & position()
Definition: O3prm.cpp:342
O3Position & position()
Definition: O3prm.cpp:955
O3ReferenceSlotList & referenceSlots()
Definition: O3prm.cpp:886
O3Position pos__
Definition: O3prm.h:664
O3RawCPT(const O3RawCPT &src)
Definition: O3prm.cpp:686
O3Type(const O3Type &src)
Definition: O3prm.cpp:245
const O3Position & position() const
Definition: O3prm.cpp:291
const O3Position & position() const
Definition: O3prm.cpp:237
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:669
O3RealType & operator=(O3RealType &&src)
Definition: O3prm.cpp:375
O3RealTypeList & real_types()
Definition: O3prm.cpp:492
O3Interface & operator=(const O3Interface &src)
Definition: O3prm.cpp:587
O3Parameter & operator=(O3Parameter &&src)
Definition: O3prm.cpp:943
std::unique_ptr< O3ReferenceSlotList > refs__
Definition: O3prm.h:669
const O3Integer & start() const
Definition: O3prm.cpp:337
The O3Aggregate is part of the AST of the O3PRM language.
Definition: O3prm.h:581
const O3Label & leftInstance() const
Definition: O3prm.cpp:1119
const std::string & label() const
Definition: O3prm.cpp:240
const O3Position & position() const
Definition: O3prm.cpp:386
const LabelMap & labels() const
Definition: O3prm.cpp:288
O3Position(O3Position &&src)
Definition: O3prm.cpp:50
O3ReferenceSlot(const O3ReferenceSlot &src)
Definition: O3prm.cpp:974
O3ImportList imports__
Definition: O3prm.h:942
const O3Label & variableType() const
Definition: O3prm.cpp:1057
O3AggregateList & aggregates()
Definition: O3prm.cpp:894
const O3Position & position() const
Definition: O3prm.cpp:155
const O3LabelList & parameters() const
Definition: O3prm.cpp:1075
const std::string & file() const
Definition: O3prm.cpp:75
const O3TypeList & types() const
Definition: O3prm.cpp:487
O3Instance(const O3Instance &src)
Definition: O3prm.cpp:1204
const O3Label & type() const
Definition: O3prm.cpp:559
The O3RealType is part of the AST of the O3PRM language.
Definition: O3prm.h:286
O3Integer & start()
Definition: O3prm.cpp:336
const O3Position & position() const
Definition: O3prm.cpp:607
O3InstanceParameterList & parameters()
Definition: O3prm.cpp:1253
const O3InstanceParameterList & parameters() const
Definition: O3prm.cpp:1249
const O3Label & name() const
Definition: O3prm.cpp:610
O3Label(const O3Label &src)
Definition: O3prm.cpp:211
The O3Type is part of the AST of the O3PRM language.
Definition: O3prm.h:203
O3IncrementList increments__
Definition: O3prm.h:862
const O3RealTypeList & real_types() const
Definition: O3prm.cpp:493
O3InterfaceElement & operator=(O3InterfaceElement &&src)
Definition: O3prm.cpp:550
O3RealType & operator=(const O3RealType &src)
Definition: O3prm.cpp:365
O3InstanceList & instances()
Definition: O3prm.cpp:1300
O3Parameter(const O3Position &pos, const O3Label &name, const O3Float &value)
Definition: O3prm.cpp:912
O3Assignment & operator=(const O3Assignment &src)
Definition: O3prm.cpp:1099
const O3ImportList & imports() const
Definition: O3prm.cpp:512
O3Position(const std::string &filename, int line, int column)
Definition: O3prm.cpp:40
The O3Label is part of the AST of the O3PRM language.
Definition: O3prm.h:172
std::unique_ptr< O3RuleList > rules__
Definition: O3prm.h:571
The O3Attribute is part of the AST of the O3PRM language.
Definition: O3prm.h:475
O3PRM & operator=(O3PRM &&src)
Definition: O3prm.cpp:474
O3Position & position()
Definition: O3prm.cpp:156
virtual O3FormulaList & values()
Definition: O3prm.cpp:714
const O3Label & name() const
Definition: O3prm.cpp:1065
O3Attribute(const O3Label &type, const O3Label &name, const O3LabelList &parents)
Definition: O3prm.cpp:624
O3Instance(O3Instance &&src)
Definition: O3prm.cpp:1210
const O3Label & rightInstance() const
Definition: O3prm.cpp:1195
O3Formula(const O3Position &pos, const Formula &formula)
Definition: O3prm.cpp:166
The O3Import is part of the AST of the O3PRM language.
Definition: O3prm.h:872
const O3LabelList & parents() const
Definition: O3prm.cpp:1069
const O3Label & superLabel() const
Definition: O3prm.cpp:870
O3LabelList & parameters()
Definition: O3prm.cpp:1073
O3ParameterList & parameters()
Definition: O3prm.cpp:881
const O3InterfaceElementList & elements() const
Definition: O3prm.cpp:618
const O3Label & name() const
Definition: O3prm.cpp:389
O3Label superLabel__
Definition: O3prm.h:234
virtual const O3RuleList & rules() const
Definition: O3prm.cpp:766
const O3ParameterList & parameters() const
Definition: O3prm.cpp:878
O3Import(O3Import &&src)
Definition: O3prm.cpp:1374
O3InterfaceList interfaces__
Definition: O3prm.h:939
const std::vector< O3Float > & values() const
Definition: O3prm.cpp:392
O3Aggregate & operator=(O3Aggregate &&src)
Definition: O3prm.cpp:1045
O3Integer(const O3Integer &src)
Definition: O3prm.cpp:90
std::string & label()
Definition: O3prm.cpp:241
O3RuleCPT(O3RuleCPT &&src)
Definition: O3prm.cpp:742
virtual std::unique_ptr< O3Attribute > copy() const
Definition: O3prm.cpp:718
virtual O3Attribute & operator=(const O3Attribute &src)
Definition: O3prm.cpp:645
O3Parameter(O3Parameter &&src)
Definition: O3prm.cpp:926
std::string & file()
Definition: O3prm.cpp:74
O3InstanceList instances__
Definition: O3prm.h:860
O3Parameter & operator=(const O3Parameter &src)
Definition: O3prm.cpp:934
O3Formula & operator=(O3Formula &&src)
Definition: O3prm.cpp:191
The O3RuleCPT is part of the AST of the O3PRM language.
Definition: O3prm.h:546
const O3Position & position() const
Definition: O3prm.cpp:343
const O3Label & leftReference() const
Definition: O3prm.cpp:1127
O3Assignment(const O3Assignment &src)
Definition: O3prm.cpp:1081
std::vector< O3Float > & values()
Definition: O3prm.cpp:391
const O3Position & position() const
Definition: O3prm.cpp:956
The O3Position is part of the AST of the O3PRM language.
Definition: O3prm.h:52
O3InstanceParameter(const O3InstanceParameter &src)
Definition: O3prm.cpp:1323
O3Float(const O3Position &pos, float value)
Definition: O3prm.cpp:124
const O3Integer & leftIndex() const
Definition: O3prm.cpp:1123
O3InstanceParameterList parameters__
Definition: O3prm.h:822
The O3Class is part of the AST of the O3PRM language.
Definition: O3prm.h:623
O3Label & superLabel()
Definition: O3prm.cpp:871
const bool & deprecated() const
Definition: O3prm.cpp:395
O3Integer & rightIndex()
Definition: O3prm.cpp:1197
const O3Label & import() const
Definition: O3prm.cpp:1392
O3Label(O3Label &&src)
Definition: O3prm.cpp:216
const O3AttributeList & attributes() const
Definition: O3prm.cpp:890
virtual O3RawCPT & operator=(const O3RawCPT &src)
Definition: O3prm.cpp:699
O3Integer & operator=(const O3Integer &src)
Definition: O3prm.cpp:102
O3Integer & operator=(O3Integer &&src)
Definition: O3prm.cpp:109
The O3Instance is part of the AST of the O3PRM language.
Definition: O3prm.h:794
O3Float(O3Float &&src)
Definition: O3prm.cpp:134
O3IntType & operator=(const O3IntType &src)
Definition: O3prm.cpp:313
O3InterfaceElement(const O3Label &type, const O3Label &name, bool isArray)
Definition: O3prm.cpp:518
O3Position & operator=(O3Position &&src)
Definition: O3prm.cpp:66
O3ImportList & imports()
Definition: O3prm.cpp:510
const O3ReferenceSlotList & referenceSlots() const
Definition: O3prm.cpp:883
O3Position & position()
Definition: O3prm.cpp:117
O3Parameter(const O3Parameter &src)
Definition: O3prm.cpp:920
virtual O3RawCPT & operator=(O3RawCPT &&src)
Definition: O3prm.cpp:707
The O3ReferenceSlot is part of the AST of the O3PRM language.
Definition: O3prm.h:442
const O3ClassList & classes() const
Definition: O3prm.cpp:504
const O3Integer & rightIndex() const
Definition: O3prm.cpp:1141
O3Interface(O3Interface &&src)
Definition: O3prm.cpp:578
const O3Label & aggregateType() const
Definition: O3prm.cpp:1061
virtual O3Label & type()
Definition: O3prm.cpp:661
const Formula & formula() const
Definition: O3prm.cpp:201
O3AssignmentList & assignments()
Definition: O3prm.cpp:1306
O3Integer(O3Integer &&src)
Definition: O3prm.cpp:95
O3IntTypeList & int_types()
Definition: O3prm.cpp:489
O3Increment(const O3Increment &src)
Definition: O3prm.cpp:1145
O3Assignment(O3Assignment &&src)
Definition: O3prm.cpp:1088
ParamScopeData(const std::string &s, const PRMReferenceSlot< GUM_SCALAR > &ref, Idx d)
O3Instance & operator=(const O3Instance &src)
Definition: O3prm.cpp:1219
O3LabelList parameters__
Definition: O3prm.h:613
O3Aggregate & operator=(const O3Aggregate &src)
Definition: O3prm.cpp:1035
The O3System is part of the AST of the O3PRM language.
Definition: O3prm.h:832
O3AttributeList & attributes()
Definition: O3prm.cpp:888
virtual std::unique_ptr< O3Attribute > copy() const
Definition: O3prm.cpp:768
const O3Position & position() const
Definition: O3prm.cpp:116
O3Label & operator=(O3Label &&src)
Definition: O3prm.cpp:230
const O3InstanceList & instances() const
Definition: O3prm.cpp:1296
O3SystemList & systems()
Definition: O3prm.cpp:506
O3Import(const O3Import &src)
Definition: O3prm.cpp:1370
O3Position pos__
Definition: O3prm.h:132
O3TypeList types__
Definition: O3prm.h:936
std::unique_ptr< Formula > formula__
Definition: O3prm.h:104
O3RealType(const O3RealType &src)
Definition: O3prm.cpp:350
std::unique_ptr< O3LabelList > interfaces__
Definition: O3prm.h:667
O3InterfaceList & interfaces()
Definition: O3prm.cpp:497
std::unique_ptr< O3FormulaList > values__
Definition: O3prm.h:536
virtual const O3Label & type() const
Definition: O3prm.cpp:662
const O3AssignmentList & assignments() const
Definition: O3prm.cpp:1302
const bool & deprecated() const
Definition: O3prm.cpp:346
const O3Label & name() const
Definition: O3prm.cpp:959
O3InterfaceElement(const O3InterfaceElement &src)
Definition: O3prm.cpp:526
O3InterfaceElementList & elements()
Definition: O3prm.cpp:615
The O3Float is part of the AST of the O3PRM language.
Definition: O3prm.h:114
O3Position & position()
Definition: O3prm.cpp:385
The O3RawCPT is part of the AST of the O3PRM language.
Definition: O3prm.h:514
O3Import & operator=(O3Import &&src)
Definition: O3prm.cpp:1386
const O3LabelList & interfaces() const
Definition: O3prm.cpp:873
O3RealTypeList real_types__
Definition: O3prm.h:938
O3System(O3System &&src)
Definition: O3prm.cpp:1265
O3Increment & operator=(O3Increment &&src)
Definition: O3prm.cpp:1173
O3RuleCPT(const O3Label &type, const O3Label &name, const O3Attribute::O3LabelList &parents, O3RuleList &&rules)
Definition: O3prm.cpp:727
O3Interface & operator=(O3Interface &&src)
Definition: O3prm.cpp:597
O3PRM(const O3PRM &src)
Definition: O3prm.cpp:412
O3InterfaceElement & operator=(const O3InterfaceElement &src)
Definition: O3prm.cpp:542
const O3Label & superLabel() const
Definition: O3prm.cpp:285
O3Import & operator=(const O3Import &src)
Definition: O3prm.cpp:1380
O3Parameter(const O3Position &pos, const O3Label &name, const O3Integer &value)
Definition: O3prm.cpp:903
The O3Assignment is part of the AST of the O3PRM language.
Definition: O3prm.h:681
const O3Float & value() const
Definition: O3prm.cpp:962
O3Interface(const O3Interface &src)
Definition: O3prm.cpp:571
O3IntType(const O3IntType &src)
Definition: O3prm.cpp:298
const O3Label & name() const
Definition: O3prm.cpp:1241
O3PRM(O3PRM &&src)
Definition: O3prm.cpp:437
const O3Position & position() const
Definition: O3prm.cpp:864
O3Class & operator=(O3Class &&src)
Definition: O3prm.cpp:851
O3Assignment & operator=(O3Assignment &&src)
Definition: O3prm.cpp:1109
O3Label & superLabel()
Definition: O3prm.cpp:284
O3LabelList & interfaces()
Definition: O3prm.cpp:876
const O3IncrementList & increments() const
Definition: O3prm.cpp:1308
O3Integer(const O3Position &pos, int value)
Definition: O3prm.cpp:85
O3Aggregate(const O3Aggregate &src)
Definition: O3prm.cpp:1018
float value() const
Definition: O3prm.cpp:158
const O3Label & leftReference() const
Definition: O3prm.cpp:1191
O3Float & operator=(const O3Float &src)
Definition: O3prm.cpp:141
O3Float(const O3Float &src)
Definition: O3prm.cpp:129
O3TypeList & types()
Definition: O3prm.cpp:486
O3System(const O3System &src)
Definition: O3prm.cpp:1259
The O3Integer is part of the AST of the O3PRM language.
Definition: O3prm.h:143
O3IntType & operator=(O3IntType &&src)
Definition: O3prm.cpp:323
O3ReferenceSlot & operator=(O3ReferenceSlot &&src)
Definition: O3prm.cpp:995
The O3InterfaceElement is part of the AST of the O3PRM language.
Definition: O3prm.h:322
O3Aggregate(O3Aggregate &&src)
Definition: O3prm.cpp:1025
O3ClassList classes__
Definition: O3prm.h:940
const O3Integer & end() const
Definition: O3prm.cpp:340
std::string file__
Definition: O3prm.h:73
const O3Label & name() const
Definition: O3prm.cpp:867
The O3PRM is part of the AST of the O3PRM language.
Definition: O3prm.h:896
O3Class(const O3Class &src)
Definition: O3prm.cpp:792
O3AssignmentList assigments__
Definition: O3prm.h:861
const O3Label & name() const
Definition: O3prm.cpp:1292
O3Attribute(O3Attribute &&src)
Definition: O3prm.cpp:637
O3Label & operator=(const O3Label &src)
Definition: O3prm.cpp:223
O3Type & operator=(O3Type &&src)
Definition: O3prm.cpp:271
std::unique_ptr< O3AttributeList > attrs__
Definition: O3prm.h:670
const O3Integer & rightIndex() const
Definition: O3prm.cpp:1198
std::vector< O3Float > values__
Definition: O3prm.h:311
O3RawCPT(const O3Label &type, const O3Label &name, const O3Attribute::O3LabelList &parents, const O3FormulaList &values)
Definition: O3prm.cpp:676
const O3Label & rightInstance() const
Definition: O3prm.cpp:1133
O3Type & operator=(const O3Type &src)
Definition: O3prm.cpp:261
O3Position pos__
Definition: O3prm.h:232
const O3Label & name() const
Definition: O3prm.cpp:562
const O3Label & name() const
Definition: O3prm.cpp:334
O3Position & position()
Definition: O3prm.cpp:865
O3Class & operator=(const O3Class &src)
Definition: O3prm.cpp:825
const O3AggregateList & aggregates() const
Definition: O3prm.cpp:895
The O3Interface is part of the AST of the O3PRM language.
Definition: O3prm.h:355
O3System & operator=(O3System &&src)
Definition: O3prm.cpp:1283
PRMType type() const
Definition: O3prm.cpp:953
O3InstanceParameter(O3InstanceParameter &&src)
Definition: O3prm.cpp:1328
virtual O3Label & name()
Definition: O3prm.cpp:664
O3Instance & operator=(O3Instance &&src)
Definition: O3prm.cpp:1228
O3Position(const O3Position &src)
Definition: O3prm.cpp:45
virtual const O3Label & name() const
Definition: O3prm.cpp:665
The O3Formula is part of the AST of the O3PRM language.
Definition: O3prm.h:85
const O3Label & type() const
Definition: O3prm.cpp:1237
O3RawCPT(O3RawCPT &&src)
Definition: O3prm.cpp:692
std::string label__
Definition: O3prm.h:191
const O3Label & name() const
Definition: O3prm.cpp:1007
O3Type(O3Type &&src)
Definition: O3prm.cpp:251
O3SystemList systems__
Definition: O3prm.h:941
LabelMap & labels()
Definition: O3prm.cpp:287
O3Position & position()
Definition: O3prm.cpp:199
O3InstanceParameter & operator=(const O3InstanceParameter &src)
Definition: O3prm.cpp:1339
const O3SystemList & systems() const
Definition: O3prm.cpp:508
O3Float & operator=(O3Float &&src)
Definition: O3prm.cpp:148
O3System & operator=(const O3System &src)
Definition: O3prm.cpp:1274
const O3Position & position() const
Definition: O3prm.cpp:198