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

Contents of /trunk/pygtk/instance.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 808 - (show annotations) (download) (as text)
Fri Aug 4 09:08:16 2006 UTC (16 years, 10 months ago) by johnpye
File MIME type: text/x-chdr
File size: 3981 byte(s)
Some debug output in cond_config.
Working on adding PyGTK GUI functionality to show inactive relaitons.
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 const bool isActive() const;
66
67 const bool isFund() const;
68 const bool isConst() const;
69 const bool isCompound() const;
70 const bool isRelation() const;
71 const bool isLogicalRelation() const;
72 const bool isWhen() const;
73 const bool isSet() const;
74 const bool isSetInt() const;
75 const bool isSetString() const;
76 const bool isSetEmpty() const; // set of of type 'empty', NB not same as SetInt::length()==0
77 const bool isArray() const;
78 const bool isDefined() const;
79 const bool isChildless() const;
80 const bool isBool() const;
81 const bool isInt() const;
82 const bool isSymbol() const;
83 const bool isReal() const;
84 const bool isAssigned() const;
85 const bool isModel() const;
86 const SymChar &getName() const;
87 const double getRealValue() const;
88 const bool isDimensionless() const;
89 const Dimensions getDimensions() const;
90 const bool getBoolValue() const;
91 const long getIntValue() const;
92 const SymChar getSymbolValue() const;
93 const std::string getValueAsString() const;
94 const std::string getRelationAsString(const Instanc &relative_to) const;
95 Plot getPlot() const;
96
97 const bool isPlottable() const;
98
99 void setFixed(const bool &val=true);
100 void setBoolValue(const bool&, const unsigned &depth=0);
101 void setRealValue(const double&, const unsigned &depth=0);
102 void setRealValueWithUnits(double, const char *, const unsigned &depth=0);
103
104 template<class T>
105 const ASCXX_Set<T> getSetValue() const{
106 if(!isSet()){
107 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not set-valued",getName().toString());
108 return ASCXX_Set<T>();
109 }
110 if(!isConst() && !isDefined()){
111 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not defined",getName().toString());
112 return ASCXX_Set<T>();
113 }
114 return ASCXX_Set<T>(SetAtomList(i));
115 }
116
117 const enum set_kind getSetType() const;
118 void write();
119 Instance *getInternalType() const;
120
121 void setVarStatus(const VarStatus &); ///< make this one private, just for friend Simulation?
122 const VarStatus getVarStatus() const;
123
124 void setLowerBound(const double &);
125 void setUpperBound(const double &);
126 void setNominal(const double &);
127 const double getLowerBound() const;
128 const double getUpperBound() const;
129 const double getNominal() const;
130
131 const std::vector<Instanc> getClique() const;
132
133 const double getResidual() const;
134 };
135
136 #endif
137

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