/[ascend]/trunk/pygtk/instance.h
ViewVC logotype

Contents of /trunk/pygtk/instance.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 774 - (show annotations) (download) (as text)
Fri Jul 14 08:01:48 2006 UTC (13 years, 7 months ago) by johnpye
File MIME type: text/x-chdr
File size: 3912 byte(s)
Added the ability to run methods on sub-models within a simulation. Use the right-click context menu.
1 #ifndef ASCXX_INSTANCE_H
2 #define ASCXX_INSTANCE_H
3
4 #include <string>
5 #include <vector>
6
7 #include "symchar.h"
8 #include "type.h"
9 #include "set.h"
10 #include "dimensions.h"
11
12 class Plot;
13
14 #include "config.h"
15 extern "C"{
16 #include <utilities/ascConfig.h>
17 #include <utilities/error.h>
18 #include <compiler/expr_types.h>
19 #include <compiler/instance_enum.h>
20 #include <compiler/atomvalue.h>
21 #include <compiler/plot.h>
22 }
23
24 typedef enum{
25 ASCXX_VAR_STATUS_UNKNOWN=0, ASCXX_VAR_FIXED, ASCXX_VAR_UNSOLVED, ASCXX_VAR_ACTIVE, ASCXX_VAR_SOLVED
26 } VarStatus;
27
28 /**
29 This class has to be called 'Instanc' in C++ to avoid a name clash
30 with C. Maybe coulda done it with namespaces but didn't know how.
31
32 This class is renamed back to 'Instance' by SWIG, so use 'Instance'
33 when you're in Python.
34
35 The Right Way to implement this class would be as a base class
36 with lots of diffent subclasses for the different atom types.
37 Maybe even multiple inheritance.
38
39 But until the underlying C code is ported to C++ or modularised in
40 some other way, it's not going to be worth the effort. We discussed
41 this in the mailing list.
42 */
43 class Instanc{
44 private:
45 struct Instance *i;
46 SymChar name;
47 std::vector<Instanc> children;
48 void setName(SymChar);
49 static SymChar fixedsym;
50 static SymChar solvervarsym;
51 public:
52 Instanc();
53 Instanc(Instance *i);
54 Instanc(Instance *i, const SymChar &name);
55 Instanc(const Instanc &parent, const unsigned long &childnum);
56 Instanc(const Instanc&);
57 ~Instanc();
58 std::vector<Instanc> &getChildren();
59 Instanc getChild(const SymChar &) const;
60 const enum inst_t getKind() const;
61 const std::string getKindStr() const;
62 const Type getType() const;
63 const bool isAtom() const;
64 const bool isFixed() const;
65
66 const bool isFund() const;
67 const bool isConst() const;
68 const bool isCompound() const;
69 const bool isRelation() const;
70 const bool isWhen() const;
71 const bool isSet() const;
72 const bool isSetInt() const;
73 const bool isSetString() const;
74 const bool isSetEmpty() const; // set of of type 'empty', NB not same as SetInt::length()==0
75 const bool isArray() const;
76 const bool isDefined() const;
77 const bool isChildless() const;
78 const bool isBool() const;
79 const bool isInt() const;
80 const bool isSymbol() const;
81 const bool isReal() const;
82 const bool isAssigned() const;
83 const bool isModel() const;
84 const SymChar &getName() const;
85 const double getRealValue() const;
86 const bool isDimensionless() const;
87 const Dimensions getDimensions() const;
88 const bool getBoolValue() const;
89 const long getIntValue() const;
90 const SymChar getSymbolValue() const;
91 const std::string getValueAsString() const;
92 const std::string getRelationAsString(const Instanc &relative_to) const;
93 Plot getPlot() const;
94
95 const bool isPlottable() const;
96
97 void setFixed(const bool &val=true);
98 void setBoolValue(const bool&, const unsigned &depth=0);
99 void setRealValue(const double&, const unsigned &depth=0);
100 void setRealValueWithUnits(double, const char *, const unsigned &depth=0);
101
102 template<class T>
103 const ASCXX_Set<T> getSetValue() const{
104 if(!isSet()){
105 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not set-valued",getName().toString());
106 return ASCXX_Set<T>();
107 }
108 if(!isConst() && !isDefined()){
109 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not defined",getName().toString());
110 return ASCXX_Set<T>();
111 }
112 return ASCXX_Set<T>(SetAtomList(i));
113 }
114
115 const enum set_kind getSetType() const;
116 void write();
117 Instance *getInternalType() const;
118
119 void setVarStatus(const VarStatus &); ///< make this one private, just for friend Simulation?
120 const VarStatus getVarStatus() const;
121
122 void setLowerBound(const double &);
123 void setUpperBound(const double &);
124 void setNominal(const double &);
125 const double getLowerBound() const;
126 const double getUpperBound() const;
127 const double getNominal() const;
128
129 const std::vector<Instanc> getClique() const;
130
131 const double getResidual() const;
132 };
133
134 #endif
135

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22