aGrUM  0.14.2
O3prm.h
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright (C) 2005 by Pierre-Henri WUILLEMIN et Christophe GONZALES *
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  ***************************************************************************/
20 
29 #include <string>
30 #include <utility>
31 #include <vector>
32 
33 #include <agrum/agrum.h>
34 #include <agrum/core/hashTable.h>
36 
37 #ifndef GUM_PRM_O3PRM_PRM_H
38 # define GUM_PRM_O3PRM_PRM_H
39 
40 namespace gum {
41  namespace prm {
42  namespace o3prm {
43 
51  class O3Position {
52  public:
53  O3Position();
54  O3Position(const std::string& filename, int line, int column);
55  O3Position(const O3Position& src);
56  O3Position(O3Position&& src);
57  ~O3Position();
58 
59  O3Position& operator=(const O3Position& src);
61 
62  std::string& file();
63  const std::string& file() const;
64 
65  int& line();
66  int line() const;
67 
68  int& column();
69  int column() const;
70 
71  private:
72  std::string __file;
73  int __line;
74  int __column;
75  };
76 
84  class O3Formula {
85  public:
86  O3Formula();
87  O3Formula(const O3Position& pos, const Formula& formula);
88  O3Formula(const O3Formula& src);
89  O3Formula(O3Formula&& src);
90  ~O3Formula();
91 
92  O3Formula& operator=(const O3Formula& src);
94 
95  O3Position& position();
96  const O3Position& position() const;
97 
98  Formula& formula();
99  const Formula& formula() const;
100 
101  private:
103  std::unique_ptr< Formula > __formula;
104  };
105 
113  class O3Float {
114  public:
115  O3Float();
116  O3Float(const O3Position& pos, float value);
117  O3Float(const O3Float& src);
118  O3Float(O3Float&& src);
119  ~O3Float();
120 
121  O3Float& operator=(const O3Float& src);
122  O3Float& operator=(O3Float&& src);
123 
124  O3Position& position();
125  const O3Position& position() const;
126 
127  float& value();
128  float value() const;
129 
130  private:
132  float __value;
133  };
134 
142  class O3Integer {
143  public:
144  O3Integer();
145  O3Integer(const O3Position& pos, int value);
146  O3Integer(const O3Integer& src);
147  O3Integer(O3Integer&& src);
148  ~O3Integer();
149 
150  O3Integer& operator=(const O3Integer& src);
151  O3Integer& operator=(O3Integer&& src);
152 
153  O3Position& position();
154  const O3Position& position() const;
155 
156  int& value();
157  int value() const;
158 
159  private:
161  int __value;
162  };
163 
171  class O3Label {
172  public:
173  O3Label();
174  O3Label(const O3Position& pos, const std::string& label);
175  O3Label(const O3Label& src);
176  O3Label(O3Label&& src);
177  ~O3Label();
178 
179  O3Label& operator=(const O3Label& src);
180  O3Label& operator=(O3Label&& src);
181 
182  O3Position& position();
183  const O3Position& position() const;
184 
185  std::string& label();
186  const std::string& label() const;
187 
188  private:
190  std::string __label;
191  };
192 
193  std::ostream& operator<<(std::ostream& o, const O3Label& src);
194 
202  class O3Type {
203  public:
204  using LabelPair = std::pair< O3Label, O3Label >;
205  using LabelMap = std::vector< LabelPair >;
206 
207  O3Type();
208  O3Type(const O3Type& src);
209  O3Type(O3Type&& src);
210  ~O3Type();
211 
212  O3Type& operator=(const O3Type& src);
213  O3Type& operator=(O3Type&& src);
214 
215  O3Position& position();
216  const O3Position& position() const;
217 
218  O3Label& name();
219  const O3Label& name() const;
220 
221  O3Label& superLabel();
222  const O3Label& superLabel() const;
223 
224  LabelMap& labels();
225  const LabelMap& labels() const;
226 
227  bool& deprecated();
228  const bool& deprecated() const;
229 
230  private:
236  };
237 
245  class O3IntType {
246  public:
247  O3IntType();
248  O3IntType(const O3IntType& src);
249  O3IntType(O3IntType&& src);
250  ~O3IntType();
251 
252  O3IntType& operator=(const O3IntType& src);
253  O3IntType& operator=(O3IntType&& src);
254 
255  O3Position& position();
256  const O3Position& position() const;
257 
258  O3Label& name();
259  const O3Label& name() const;
260 
261  O3Integer& start();
262  const O3Integer& start() const;
263 
264  O3Integer& end();
265  const O3Integer& end() const;
266 
267  bool& deprecated();
268  const bool& deprecated() const;
269 
270  private:
276  };
277 
285  class O3RealType {
286  public:
287  O3RealType();
288  O3RealType(const O3RealType& src);
289  O3RealType(O3RealType&& src);
290  ~O3RealType();
291 
292  O3RealType& operator=(const O3RealType& src);
294 
295  O3Position& position();
296  const O3Position& position() const;
297 
298  O3Label& name();
299  const O3Label& name() const;
300 
301  std::vector< O3Float >& values();
302  const std::vector< O3Float >& values() const;
303 
304  bool& deprecated();
305  const bool& deprecated() const;
306 
307  private:
310  std::vector< O3Float > __values;
312  };
313 
322  public:
324  O3InterfaceElement(const O3Label& type, const O3Label& name, bool isArray);
328 
331 
332  O3Label& type();
333  const O3Label& type() const;
334 
335  O3Label& name();
336  const O3Label& name() const;
337 
338  bool& isArray();
339  bool isArray() const;
340 
341  private:
344  bool __isArray;
345  };
346 
354  class O3Interface {
355  public:
356  using O3InterfaceElementList = std::vector< O3InterfaceElement >;
357 
358  O3Interface();
359  O3Interface(const O3Interface& src);
360  O3Interface(O3Interface&& src);
361  ~O3Interface();
362 
363  O3Interface& operator=(const O3Interface& src);
365 
366  O3Position& position();
367  const O3Position& position() const;
368 
369  O3Label& name();
370  const O3Label& name() const;
371 
372  O3Label& superLabel();
373  const O3Label& superLabel() const;
374 
375  O3InterfaceElementList& elements();
376  const O3InterfaceElementList& elements() const;
377 
378  private:
382  std::unique_ptr< O3InterfaceElementList > __elts;
383  };
384 
392  class O3Parameter {
393  public:
394  enum class PRMType { NONE, INT, FLOAT };
395 
396  O3Parameter();
397  O3Parameter(const O3Position& pos,
398  const O3Label& name,
399  const O3Integer& value);
400  O3Parameter(const O3Position& pos,
401  const O3Label& name,
402  const O3Float& value);
403  O3Parameter(const O3Parameter& src);
404  O3Parameter(O3Parameter&& src);
405  ~O3Parameter();
406 
407  O3Parameter& operator=(const O3Parameter& src);
409 
410  PRMType& type();
411  PRMType type() const;
412 
413  O3Position& position();
414  const O3Position& position() const;
415 
416  O3Label& name();
417  const O3Label& name() const;
418 
419  O3Float& value();
420  const O3Float& value() const;
421 
422  private:
427  };
428 
437  public:
438  O3ReferenceSlot();
439  O3ReferenceSlot(const O3Label& type, const O3Label& name, bool isArray);
440  O3ReferenceSlot(const O3ReferenceSlot& src);
442  ~O3ReferenceSlot();
443 
446 
447  O3Label& type();
448  const O3Label& type() const;
449 
450  O3Label& name();
451  const O3Label& name() const;
452 
453  bool& isArray();
454  bool isArray() const;
455 
456  private:
459  bool __isArray;
460  };
461 
469  class O3Attribute {
470  public:
471  using O3LabelList = std::vector< O3Label >;
472 
473  O3Attribute();
474  O3Attribute(const O3Label& type,
475  const O3Label& name,
476  const O3LabelList& parents);
477  O3Attribute(const O3Attribute& src);
478  O3Attribute(O3Attribute&& src);
479  virtual ~O3Attribute();
480 
481  virtual O3Attribute& operator=(const O3Attribute& src);
482  virtual O3Attribute& operator=(O3Attribute&& src);
483 
484  virtual O3Label& type();
485  virtual const O3Label& type() const;
486 
487  virtual O3Label& name();
488  virtual const O3Label& name() const;
489 
490  virtual O3LabelList& parents();
491  virtual const O3LabelList& parents() const;
492 
493  virtual std::unique_ptr< O3Attribute > copy() const = 0;
494 
495  private:
499  };
500 
508  class O3RawCPT : public O3Attribute {
509  public:
510  using O3FormulaList = std::vector< O3Formula >;
511 
512  O3RawCPT();
513  O3RawCPT(const O3Label& type,
514  const O3Label& name,
515  const O3Attribute::O3LabelList& parents,
516  const O3FormulaList& values);
517  O3RawCPT(const O3RawCPT& src);
518  O3RawCPT(O3RawCPT&& src);
519  ~O3RawCPT();
520 
521  virtual O3RawCPT& operator=(const O3RawCPT& src);
522  virtual O3RawCPT& operator=(O3RawCPT&& src);
523 
524  virtual O3FormulaList& values();
525  virtual const O3FormulaList& values() const;
526 
527  virtual std::unique_ptr< O3Attribute > copy() const;
528 
529  private:
530  std::unique_ptr< O3FormulaList > __values;
531  };
532 
540  class O3RuleCPT : public O3Attribute {
541  public:
542  using O3LabelList = std::vector< O3Label >;
543  using O3FormulaList = std::vector< O3Formula >;
544  using O3Rule = std::pair< O3LabelList, O3FormulaList >;
545  using O3RuleList = std::vector< O3Rule >;
546 
547  O3RuleCPT();
548  O3RuleCPT(const O3Label& type,
549  const O3Label& name,
550  const O3Attribute::O3LabelList& parents,
551  O3RuleList&& rules);
552  O3RuleCPT(const O3RuleCPT& src);
553  O3RuleCPT(O3RuleCPT&& src);
554  ~O3RuleCPT();
555 
556  virtual O3RuleCPT& operator=(const O3RuleCPT& src);
557  virtual O3RuleCPT& operator=(O3RuleCPT&& src);
558 
559  virtual O3RuleList& rules();
560  virtual const O3RuleList& rules() const;
561 
562  virtual std::unique_ptr< O3Attribute > copy() const;
563 
564  private:
565  std::unique_ptr< O3RuleList > __rules;
566  };
567 
575  class O3Aggregate {
576  public:
577  using O3LabelList = std::vector< O3Label >;
578 
579  O3Aggregate();
580  O3Aggregate(const O3Aggregate& src);
581  O3Aggregate(O3Aggregate&& src);
582  virtual ~O3Aggregate();
583 
584  O3Aggregate& operator=(const O3Aggregate& src);
586 
587  O3Label& variableType();
588  const O3Label& variableType() const;
589 
590  O3Label& aggregateType();
591  const O3Label& aggregateType() const;
592 
593  O3Label& name();
594  const O3Label& name() const;
595 
596  O3LabelList& parents();
597  const O3LabelList& parents() const;
598 
599  O3LabelList& parameters();
600  const O3LabelList& parameters() const;
601 
602  private:
608  };
609 
617  class O3Class {
618  public:
619  using O3LabelList = std::vector< O3Label >;
620  using O3ParameterList = std::vector< O3Parameter >;
621  using O3ReferenceSlotList = std::vector< O3ReferenceSlot >;
622  using O3AttributeList = std::vector< std::unique_ptr< O3Attribute > >;
623  using O3AggregateList = std::vector< O3Aggregate >;
624 
625  O3Class();
626  O3Class(const O3Class& src);
627  O3Class(O3Class&& src);
628  ~O3Class();
629 
630  O3Class& operator=(const O3Class& src);
631  O3Class& operator=(O3Class&& src);
632 
633  O3Position& position();
634  const O3Position& position() const;
635 
636  O3Label& name();
637  const O3Label& name() const;
638 
639  O3Label& superLabel();
640  const O3Label& superLabel() const;
641 
642  O3LabelList& interfaces();
643  const O3LabelList& interfaces() const;
644 
645  O3ParameterList& parameters();
646  const O3ParameterList& parameters() const;
647 
648  O3ReferenceSlotList& referenceSlots();
649  const O3ReferenceSlotList& referenceSlots() const;
650 
651  O3AttributeList& attributes();
652  const O3AttributeList& attributes() const;
653 
654  O3AggregateList& aggregates();
655  const O3AggregateList& aggregates() const;
656 
657  private:
661  std::unique_ptr< O3LabelList > __interfaces;
662  std::unique_ptr< O3ParameterList > __params;
663  std::unique_ptr< O3ReferenceSlotList > __refs;
664  std::unique_ptr< O3AttributeList > __attrs;
665  std::unique_ptr< O3AggregateList > __aggs;
666  };
667 
675  class O3Assignment {
676  public:
677  O3Assignment();
678  O3Assignment(const O3Assignment& src);
679  O3Assignment(O3Assignment&& src);
680  ~O3Assignment();
681 
682  O3Assignment& operator=(const O3Assignment& src);
684 
685  O3Label& leftInstance();
686  const O3Label& leftInstance() const;
687 
688  O3Integer& leftIndex();
689  const O3Integer& leftIndex() const;
690 
691  O3Label& leftReference();
692  const O3Label& leftReference() const;
693 
694  O3Label& rightInstance();
695  const O3Label& rightInstance() const;
696 
697  O3Integer& rightIndex();
698  const O3Integer& rightIndex() const;
699 
700  private:
706  };
707 
715  class O3Increment {
716  public:
717  O3Increment();
718  O3Increment(const O3Increment& src);
719  O3Increment(O3Increment&& src);
720  ~O3Increment();
721 
722  O3Increment& operator=(const O3Increment& src);
724 
725  O3Label& leftInstance();
726  const O3Label& leftInstance() const;
727 
728  O3Integer& leftIndex();
729  const O3Integer& leftIndex() const;
730 
731  O3Label& leftReference();
732  const O3Label& leftReference() const;
733 
734  O3Label& rightInstance();
735  const O3Label& rightInstance() const;
736 
737  O3Integer& rightIndex();
738  const O3Integer& rightIndex() const;
739 
740  private:
746  };
747 
757  public:
762 
765 
766  O3Label& name();
767  const O3Label& name() const;
768 
769  O3Float& value();
770  const O3Float& value() const;
771 
772  bool& isInteger();
773  bool isInteger() const;
774 
775  private:
779  };
780 
788  class O3Instance {
789  public:
790  using O3InstanceParameterList = std::vector< O3InstanceParameter >;
791 
792  O3Instance();
793  O3Instance(const O3Instance& src);
794  O3Instance(O3Instance&& src);
795  ~O3Instance();
796 
797  O3Instance& operator=(const O3Instance& src);
799 
800  O3Label& type();
801  const O3Label& type() const;
802 
803  O3Label& name();
804  const O3Label& name() const;
805 
806  O3Integer& size();
807  const O3Integer& size() const;
808 
809  O3InstanceParameterList& parameters();
810  const O3InstanceParameterList& parameters() const;
811 
812  private:
817  };
818 
826  class O3System {
827  public:
828  using O3InstanceList = std::vector< O3Instance >;
829  using O3AssignmentList = std::vector< O3Assignment >;
830  using O3IncrementList = std::vector< O3Increment >;
831 
832  O3System();
833  O3System(const O3System& src);
834  O3System(O3System&& src);
835  ~O3System();
836 
837  O3System& operator=(const O3System& src);
838  O3System& operator=(O3System&& src);
839 
840  O3Label& name();
841  const O3Label& name() const;
842 
843  O3InstanceList& instances();
844  const O3InstanceList& instances() const;
845 
846  O3AssignmentList& assignments();
847  const O3AssignmentList& assignments() const;
848 
849  O3IncrementList& increments();
850  const O3IncrementList& increments() const;
851 
852  private:
857  };
858 
866  class O3Import {
867  public:
868  O3Import();
869  O3Import(const O3Import& src);
870  O3Import(O3Import&& src);
871  ~O3Import();
872 
873  O3Import& operator=(const O3Import& src);
874  O3Import& operator=(O3Import&& src);
875 
876  O3Label& import();
877  const O3Label& import() const;
878 
879  private:
881  };
882 
890  class O3PRM {
891  public:
892  using O3TypeList = std::vector< std::unique_ptr< O3Type > >;
893  using O3IntTypeList = std::vector< std::unique_ptr< O3IntType > >;
894  using O3RealTypeList = std::vector< std::unique_ptr< O3RealType > >;
895  using O3InterfaceList = std::vector< std::unique_ptr< O3Interface > >;
896  using O3ClassList = std::vector< std::unique_ptr< O3Class > >;
897  using O3SystemList = std::vector< std::unique_ptr< O3System > >;
898  using O3ImportList = std::vector< std::unique_ptr< O3Import > >;
899 
900  O3PRM();
901  O3PRM(const O3PRM& src);
902  O3PRM(O3PRM&& src);
903  ~O3PRM();
904 
905  O3PRM& operator=(const O3PRM& src);
906  O3PRM& operator=(O3PRM&& src);
907 
908  O3TypeList& types();
909  const O3TypeList& types() const;
910 
911  O3IntTypeList& int_types();
912  const O3IntTypeList& int_types() const;
913 
914  O3RealTypeList& real_types();
915  const O3RealTypeList& real_types() const;
916 
917  O3InterfaceList& interfaces();
918  const O3InterfaceList& interfaces() const;
919 
920  O3ClassList& classes();
921  const O3ClassList& classes() const;
922 
923  O3SystemList& systems();
924  const O3SystemList& systems() const;
925 
926  O3ImportList& imports();
927  const O3ImportList& imports() const;
928 
929  private:
937  };
938 
939  } // namespace o3prm
940  } // namespace prm
941 } // namespace gum
942 
943 #endif // GUM_PRM_O3PRM_PRM_H
std::vector< std::unique_ptr< O3RealType > > O3RealTypeList
Definition: O3prm.h:894
O3SystemList __systems
Definition: O3prm.h:935
std::pair< O3LabelList, O3FormulaList > O3Rule
Definition: O3prm.h:544
std::vector< O3ReferenceSlot > O3ReferenceSlotList
Definition: O3prm.h:621
O3LabelList __parameters
Definition: O3prm.h:607
O3ClassList __classes
Definition: O3prm.h:934
O3Position & operator=(const O3Position &src)
Definition: O3prm.cpp:57
std::unique_ptr< O3ParameterList > __params
Definition: O3prm.h:662
std::vector< O3InstanceParameter > O3InstanceParameterList
Definition: O3prm.h:790
O3IncrementList __increments
Definition: O3prm.h:856
The O3Increment is part of the AST of the O3PRM language.
Definition: O3prm.h:715
std::vector< O3Increment > O3IncrementList
Definition: O3prm.h:830
The O3InstanceParameter is part of the AST of the O3PRM language.
Definition: O3prm.h:756
O3Position __pos
Definition: O3prm.h:658
The O3Parameter is part of the AST of the O3PRM language.
Definition: O3prm.h:392
The O3IntType is part of the AST of the O3PRM language.
Definition: O3prm.h:245
Evaluates a string as a algebraic formula.
Definition: formula.h:271
std::unique_ptr< O3ReferenceSlotList > __refs
Definition: O3prm.h:663
O3Position __pos
Definition: O3prm.h:131
std::vector< std::unique_ptr< O3Attribute > > O3AttributeList
Definition: O3prm.h:622
std::unique_ptr< O3LabelList > __interfaces
Definition: O3prm.h:661
std::vector< std::unique_ptr< O3Import > > O3ImportList
Definition: O3prm.h:898
The O3Aggregate is part of the AST of the O3PRM language.
Definition: O3prm.h:575
std::ostream & operator<<(std::ostream &o, const O3Label &src)
Definition: O3prm.cpp:1313
std::vector< std::unique_ptr< O3IntType > > O3IntTypeList
Definition: O3prm.h:893
The O3RealType is part of the AST of the O3PRM language.
Definition: O3prm.h:285
std::unique_ptr< O3AttributeList > __attrs
Definition: O3prm.h:664
std::vector< O3Label > O3LabelList
Definition: O3prm.h:619
The O3Type is part of the AST of the O3PRM language.
Definition: O3prm.h:202
The O3Label is part of the AST of the O3PRM language.
Definition: O3prm.h:171
Headers files for the gum::FormulaPart and gum::Formula classes.
The O3Attribute is part of the AST of the O3PRM language.
Definition: O3prm.h:469
std::unique_ptr< O3FormulaList > __values
Definition: O3prm.h:530
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
O3RealTypeList __real_types
Definition: O3prm.h:932
The O3Import is part of the AST of the O3PRM language.
Definition: O3prm.h:866
std::string __file
Definition: O3prm.h:72
std::vector< O3Label > O3LabelList
Definition: O3prm.h:471
std::vector< O3Formula > O3FormulaList
Definition: O3prm.h:510
std::string & file()
Definition: O3prm.cpp:73
O3IntTypeList __int_types
Definition: O3prm.h:931
std::vector< std::unique_ptr< O3Interface > > O3InterfaceList
Definition: O3prm.h:895
The O3RuleCPT is part of the AST of the O3PRM language.
Definition: O3prm.h:540
The O3Position is part of the AST of the O3PRM language.
Definition: O3prm.h:51
std::unique_ptr< O3AggregateList > __aggs
Definition: O3prm.h:665
std::vector< O3Float > __values
Definition: O3prm.h:310
std::unique_ptr< O3RuleList > __rules
Definition: O3prm.h:565
std::vector< std::unique_ptr< O3Class > > O3ClassList
Definition: O3prm.h:896
O3Position __pos
Definition: O3prm.h:189
The O3Class is part of the AST of the O3PRM language.
Definition: O3prm.h:617
std::vector< O3Rule > O3RuleList
Definition: O3prm.h:545
O3TypeList __types
Definition: O3prm.h:930
std::string __label
Definition: O3prm.h:190
The O3Instance is part of the AST of the O3PRM language.
Definition: O3prm.h:788
std::unique_ptr< O3InterfaceElementList > __elts
Definition: O3prm.h:382
The O3ReferenceSlot is part of the AST of the O3PRM language.
Definition: O3prm.h:436
std::vector< LabelPair > LabelMap
Definition: O3prm.h:205
O3InstanceParameterList __parameters
Definition: O3prm.h:816
std::vector< O3Aggregate > O3AggregateList
Definition: O3prm.h:623
std::vector< O3Parameter > O3ParameterList
Definition: O3prm.h:620
std::pair< O3Label, O3Label > LabelPair
Definition: O3prm.h:204
The O3System is part of the AST of the O3PRM language.
Definition: O3prm.h:826
std::vector< std::unique_ptr< O3Type > > O3TypeList
Definition: O3prm.h:892
O3InterfaceList __interfaces
Definition: O3prm.h:933
std::vector< O3Formula > O3FormulaList
Definition: O3prm.h:543
The O3Float is part of the AST of the O3PRM language.
Definition: O3prm.h:113
The O3RawCPT is part of the AST of the O3PRM language.
Definition: O3prm.h:508
O3ImportList __imports
Definition: O3prm.h:936
std::vector< O3Label > O3LabelList
Definition: O3prm.h:577
The O3Assignment is part of the AST of the O3PRM language.
Definition: O3prm.h:675
std::vector< O3InterfaceElement > O3InterfaceElementList
Definition: O3prm.h:356
std::unique_ptr< Formula > __formula
Definition: O3prm.h:103
The O3Integer is part of the AST of the O3PRM language.
Definition: O3prm.h:142
std::vector< O3Instance > O3InstanceList
Definition: O3prm.h:828
The O3InterfaceElement is part of the AST of the O3PRM language.
Definition: O3prm.h:321
The O3PRM is part of the AST of the O3PRM language.
Definition: O3prm.h:890
O3Position __pos
Definition: O3prm.h:231
O3InstanceList __instances
Definition: O3prm.h:854
The O3Interface is part of the AST of the O3PRM language.
Definition: O3prm.h:354
O3AssignmentList __assigments
Definition: O3prm.h:855
std::vector< std::unique_ptr< O3System > > O3SystemList
Definition: O3prm.h:897
The O3Formula is part of the AST of the O3PRM language.
Definition: O3prm.h:84
Class hash tables iterators.
std::vector< O3Assignment > O3AssignmentList
Definition: O3prm.h:829
O3Label __superLabel
Definition: O3prm.h:233