initial commit of the fluid simulator.
[blender.git] / intern / elbeem / intern / attributes.h
1 /******************************************************************************
2  *
3  * El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
4  * Copyright 2003,2004 Nils Thuerey
5  *
6  * configuration attribute storage class and attribute class
7  *
8  *****************************************************************************/
9
10
11 #ifndef NTL_ATTRIBUTES_H
12
13 #include "utilities.h"
14 #include "ntl_matrices.h"
15
16
17 //! A single attribute
18 class Attribute
19 {
20         public:
21         //! Standard constructor
22         Attribute(string mn, vector<string> &value, int setline) :
23                         mName(mn), mValue(value), 
24                         mLine(setline), mUsed(false) { };
25         //! Copy constructor
26         Attribute(Attribute &a) :
27                         mName(a.mName), mValue(a.mValue), 
28                         mLine(a.mLine), mUsed(false) { };
29         //! Destructor
30         ~Attribute() { /* empty */ };
31
32                 //! set used flag
33                 void setUsed(bool set){ mUsed = set; }
34                 //! get used flag
35                 bool getUsed() { return mUsed; }
36
37                 //! get value as string 
38                 string getAsString();
39
40                 //! get value as integer value
41                 int getAsInt();
42
43                 //! get value as boolean
44                 bool getAsBool();
45
46                 //! get value as double value
47                 double getAsFloat();
48
49                 //! get value as 3d vector 
50                 ntlVec3d getAsVec3d();
51
52                 //! get value as 4x4 matrix
53                 ntlMat4Gfx getAsMat4Gfx();
54
55                 //! get the concatenated string of all value string
56                 string getCompleteString();
57
58                 //! debug function, prints value 
59                 void print();
60                 
61         protected:
62
63                 /*! the attr name */
64                 string mName;
65
66                 /*! the attr value */
67                 vector<string> mValue;
68
69                 /*! line where the value was defined in the config file (for error messages) */
70                 int mLine;
71
72                 /*! was this attribute used? */
73                 bool mUsed;
74 };
75
76
77 //! The list of configuration attributes
78 class AttributeList
79 {
80         public:
81         //! Standard constructor
82         AttributeList(string name) :
83                         mName(name), mAttrs() { };
84         //! Destructor , delete all contained attribs
85         ~AttributeList();
86
87                 /*! add an attribute to this list */
88                 void addAttr(string name, vector<string> &value, int line) {
89                         if(exists(name)) delete mAttrs[name];
90                         mAttrs[name] = new Attribute(name,value,line);
91                 }
92
93                 /*! check if an attribute is set */
94                 bool exists(string name) {
95                         if(mAttrs.find(name) == mAttrs.end()) return false;
96                         return true;
97                 }
98
99                 /*! get an attribute */
100                 Attribute *find(string name) {
101                         if(mAttrs.find(name) == mAttrs.end()) { 
102                                 errorOut("AttributeList::find error: Invalid attribute '"<<name<<"' , not found..." );
103                                 exit(1); 
104                         }
105                         return mAttrs[name];
106                 }
107
108                 //! set all params to used, for invisible objects
109                 void setAllUsed();
110                 //! check if there were unknown params
111                 bool checkUnusedParams();
112
113                 //! import attributes from other attribute list
114                 void import(AttributeList *oal);
115
116                 //! read attributes for object initialization
117                 int      readInt(string name, int defaultValue,         string source,string target, bool needed);
118                 bool     readBool(string name, bool defaultValue,       string source,string target, bool needed);
119                 double   readFloat(string name, double defaultValue,   string source,string target, bool needed);
120                 string   readString(string name, string defaultValue,   string source,string target, bool needed);
121                 ntlVec3d readVec3d(string name, ntlVec3d defaultValue,  string source,string target, bool needed);
122                 ntlMat4Gfx readMat4Gfx(string name, ntlMat4Gfx defaultValue,  string source,string target, bool needed);
123
124                 //! set that a parameter can be given, and will be ignored...
125                 bool ignoreParameter(string name, string source);
126
127                 //! debug function, prints all attribs 
128                 void print();
129                 
130         protected:
131
132                 /*! attribute name (form config file) */
133                 string mName;
134
135                 /*! the global attribute storage */
136                 map<string, Attribute*> mAttrs;
137
138 };
139
140
141 #define NTL_ATTRIBUTES_H
142 #endif
143