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

Contents of /trunk/pygtk/instance.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 732 - (show annotations) (download) (as text)
Tue Jul 4 14:40:17 2006 UTC (17 years, 10 months ago) by johnpye
File MIME type: text/x-chdr
File size: 3883 byte(s)
Added general-purpose text-information dialog to PyGTK interface.
Added reporting of clique of a variable to PyGTK GUI.
Changed 'fixable' and 'new bounds' to use the new dialog.
Removed 'set<...>' from ascpy.i (it wasn't working), changed to vector<...>.
Exported a couple of var incidences fns to the DLL/SO.
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 SymChar &getName() const;
84 const double getRealValue() const;
85 const bool isDimensionless() const;
86 const Dimensions getDimensions() const;
87 const bool getBoolValue() const;
88 const long getIntValue() const;
89 const SymChar getSymbolValue() const;
90 const std::string getValueAsString() const;
91 const std::string getRelationAsString(const Instanc &relative_to) const;
92 Plot getPlot() const;
93
94 const bool isPlottable() const;
95
96 void setFixed(const bool &val=true);
97 void setBoolValue(const bool&, const unsigned &depth=0);
98 void setRealValue(const double&, const unsigned &depth=0);
99 void setRealValueWithUnits(double, const char *, const unsigned &depth=0);
100
101 template<class T>
102 const ASCXX_Set<T> getSetValue() const{
103 if(!isSet()){
104 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not set-valued",getName().toString());
105 return ASCXX_Set<T>();
106 }
107 if(!isConst() && !isDefined()){
108 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not defined",getName().toString());
109 return ASCXX_Set<T>();
110 }
111 return ASCXX_Set<T>(SetAtomList(i));
112 }
113
114 const enum set_kind getSetType() const;
115 void write();
116 Instance *getInternalType() const;
117
118 void setVarStatus(const VarStatus &); ///< make this one private, just for friend Simulation?
119 const VarStatus getVarStatus() const;
120
121 void setLowerBound(const double &);
122 void setUpperBound(const double &);
123 void setNominal(const double &);
124 const double getLowerBound() const;
125 const double getUpperBound() const;
126 const double getNominal() const;
127
128 const std::vector<Instanc> getClique() const;
129
130 const double getResidual() const;
131 };
132
133 #endif
134

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