00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GRINDER_KEYS_DOT_H
00023 #define __GRINDER_KEYS_DOT_H
00024
00025 #include <simBase/simBase.h>
00026 #include <string>
00027 #include <map>
00028 #include <limits>
00029 #include <mathGutz.h>
00030 #include <smartptr.h>
00031
00032
00033
00034
00035 typedef std::string GKeyType;
00036
00037
00038 struct __KeyMapCmp__
00039 {
00040 bool operator()(const GKeyType &k1 , const GKeyType &k2) const
00041 {
00042 return (k1 < k1);
00043 }
00044 };
00045
00046
00047 struct KeyPair;
00048
00049
00050
00051
00052
00053
00054 class Key :
00055 public SimBase,
00056 public gutz::Counted
00057 {
00058 public:
00059
00060 typedef gutz::SmartPtr<Key> KeySP;
00061 typedef std::map<GKeyType, KeySP, __KeyMapCmp__> KeySPMap;
00062 typedef KeySPMap::iterator KeySPMapIter;
00063
00064 Key();
00065 Key(const std::string &name, int type, const KeyPair *subKeys=0, int nSubKeys=0);
00066 virtual ~Key();
00067
00068
00069
00070 std::string getName() const {return _name;}
00071 void setName(std::string name) {_name = name;}
00072
00073
00074 std::string getText() const {return _text;}
00075 void setText(std::string text) {_text = text;}
00076
00077
00078
00079 enum KEY_TYPES {
00080 UNKNOWN = 0,
00081 DEFINE = 1<<0,
00082 VALUE = 1<<1,
00083 VARIABLE = 1<<2,
00084 CONSTANT = 1<<3,
00085 FUNCTION = 1<<4,
00086 SCOPE = 1<<5,
00087 KEY_LAST = 1<<6
00088 };
00089
00090 int getType() const {return _type;}
00091 void setType(int type) {_type = type;}
00092
00093
00094 typedef gutz::vec4d DVEC_TYPE;
00095 const DVEC_TYPE DVEC_UNUSED;
00096
00097 virtual DVEC_TYPE getDVec() const {return _dv;}
00098 virtual void setDVec(DVEC_TYPE vec){_dv = vec; }
00099
00100
00101 typedef gutz::vec4i IVEC_TYPE;
00102 const IVEC_TYPE IVEC_UNUSED;
00103
00104 virtual IVEC_TYPE getIVec() const {return _iv;}
00105 virtual void setIVec(IVEC_TYPE vec){_iv = vec; }
00106
00107
00108
00109
00110 KeySPMap getAllKeys() const {return _keys;}
00111
00112 KeySP getKey(const GKeyType kn) const;
00113
00114 KeySP setKey(const GKeyType kn, const KeySP key);
00115
00116 KeySP addKey(const GKeyType kn, const KeySP key);
00117 KeySP addKey(const KeyPair kp);
00118
00119 KeySP delKey(const GKeyType kn);
00120
00121 bool hasKey(const GKeyType kn) const;
00122
00123
00124 int getOp() const { return _op; }
00125 void setOp(int op) { _op = op; }
00126
00127
00128 int size() { return int(_keys.size()); }
00129
00130 protected:
00131 std::string _name;
00132 std::string _text;
00133 int _type;
00134 int _op;
00135 KeySPMap _keys;
00136
00137 DVEC_TYPE _dv;
00138 IVEC_TYPE _iv;
00139
00140 };
00141
00142
00143 typedef Key::KeySP KeySP;
00144 typedef Key::KeySPMap KeySPMap;
00145 typedef Key::KeySPMapIter KeySPMapIter;
00146
00147
00148 struct KeyPair {
00149 KeyPair(const GKeyType keyName, const Key theKey)
00150 : kn(keyName), key(theKey) {}
00151 GKeyType kn;
00152 Key key;
00153 };
00154
00155 #endif
00156