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

Annotation of /trunk/pygtk/instance.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 774 - (hide annotations) (download) (as text)
Fri Jul 14 08:01:48 2006 UTC (16 years, 4 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 johnpye 132 #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 johnpye 176 class Plot;
13    
14 johnpye 480 #include "config.h"
15 johnpye 132 extern "C"{
16     #include <utilities/ascConfig.h>
17 johnpye 164 #include <utilities/error.h>
18 johnpye 669 #include <compiler/expr_types.h>
19 johnpye 132 #include <compiler/instance_enum.h>
20     #include <compiler/atomvalue.h>
21 johnpye 172 #include <compiler/plot.h>
22 johnpye 132 }
23    
24 johnpye 255 typedef enum{
25 johnpye 258 ASCXX_VAR_STATUS_UNKNOWN=0, ASCXX_VAR_FIXED, ASCXX_VAR_UNSOLVED, ASCXX_VAR_ACTIVE, ASCXX_VAR_SOLVED
26 johnpye 255 } VarStatus;
27    
28 johnpye 132 /**
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 johnpye 190 Maybe even multiple inheritance.
38 johnpye 132
39 johnpye 480 But until the underlying C code is ported to C++ or modularised in
40 johnpye 273 some other way, it's not going to be worth the effort. We discussed
41     this in the mailing list.
42 johnpye 132 */
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 johnpye 732 ~Instanc();
58 johnpye 132 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 johnpye 774 const bool isModel() const;
84 johnpye 132 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 johnpye 175 const std::string getValueAsString() const;
92 johnpye 215 const std::string getRelationAsString(const Instanc &relative_to) const;
93 johnpye 176 Plot getPlot() const;
94 johnpye 132
95 johnpye 172 const bool isPlottable() const;
96    
97 johnpye 132 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 johnpye 190 template<class T>
103 johnpye 278 const ASCXX_Set<T> getSetValue() const{
104 johnpye 132 if(!isSet()){
105 johnpye 190 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not set-valued",getName().toString());
106 johnpye 132 return ASCXX_Set<T>();
107     }
108     if(!isConst() && !isDefined()){
109 johnpye 190 ERROR_REPORTER_NOLINE(ASC_USER_ERROR,"Variable '%s' is not defined",getName().toString());
110 johnpye 132 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 johnpye 255
119     void setVarStatus(const VarStatus &); ///< make this one private, just for friend Simulation?
120     const VarStatus getVarStatus() const;
121 johnpye 268
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 johnpye 271
129 johnpye 732 const std::vector<Instanc> getClique() const;
130 johnpye 480
131 johnpye 273 const double getResidual() const;
132 johnpye 132 };
133    
134     #endif
135    

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