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

Contents of /trunk/pygtk/instance.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 952 - (show annotations) (download) (as text)
Tue Nov 28 23:01:50 2006 UTC (13 years, 2 months ago) by johnpye
File MIME type: text/x-chdr
File size: 4060 byte(s)
Pruned some debug messages from integrator.c, ida.c.
Improved exception messages from SolverParameter class.
Added array access functions to Instanc class (ongoing).
Attempting to run CUnit tests from the Python test suite (not successful, ongoing).
Cleaned up some headers, license notices, doxy docs, etc.
Fixed wrong #include <dmalloc.h> in ascpy.i (thanks Krishnan).
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 Instanc getChild(const long &) const;
61 const enum inst_t getKind() const;
62 const std::string getKindStr() const;
63 const Type getType() const;
64 const bool isAtom() const;
65 const bool isFixed() const;
66 const bool isActive() const;
67
68 const bool isFund() const;
69 const bool isConst() const;
70 const bool isCompound() const;
71 const bool isRelation() const;
72 const bool isLogicalRelation() const;
73 const bool isWhen() const;
74 const bool isSet() const;
75 const bool isSetInt() const;
76 const bool isSetString() const;
77 const bool isSetEmpty() const; // set of of type 'empty', NB not same as SetInt::length()==0
78 const bool isArray() const;
79 const bool isDefined() const;
80 const bool isChildless() const;
81 const bool isBool() const;
82 const bool isInt() const;
83 const bool isSymbol() const;
84 const bool isReal() const;
85 const bool isAssigned() const;
86 const bool isModel() const;
87 const SymChar &getName() const;
88 const double getRealValue() const;
89 const bool isDimensionless() const;
90 const Dimensions getDimensions() const;
91 const bool getBoolValue() const;
92 const long getIntValue() const;
93 const SymChar getSymbolValue() const;
94
95 const std::string getValueAsString() const;
96 const std::string getRelationAsString(const Instanc &relative_to) const;
97 Plot getPlot() const;
98
99 const bool isPlottable() const;
100
101 void setFixed(const bool &val=true);
102 void setBoolValue(const bool&, const unsigned &depth=0);
103 void setRealValue(const double&, const unsigned &depth=0);
104 void setRealValueWithUnits(double, const char *, const unsigned &depth=0);
105 void setSymbolValue(const SymChar &);
106
107 template<class T>
108 const ASCXX_Set<T> getSetValue() const{
109 if(!isSet()){
110 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not set-valued",getName().toString());
111 return ASCXX_Set<T>();
112 }
113 if(!isConst() && !isDefined()){
114 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not defined",getName().toString());
115 return ASCXX_Set<T>();
116 }
117 return ASCXX_Set<T>(SetAtomList(i));
118 }
119
120 const enum set_kind getSetType() const;
121 void write();
122 Instance *getInternalType() const;
123
124 void setVarStatus(const VarStatus &); ///< make this one private, just for friend Simulation?
125 const VarStatus getVarStatus() const;
126
127 void setLowerBound(const double &);
128 void setUpperBound(const double &);
129 void setNominal(const double &);
130 const double getLowerBound() const;
131 const double getUpperBound() const;
132 const double getNominal() const;
133
134 const std::vector<Instanc> getClique() const;
135
136 const double getResidual() const;
137 };
138
139 #endif
140

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