00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __NEDELEMENT_H
00020 #define __NEDELEMENT_H
00021
00022 #ifdef _MSC_VER
00023
00024
00025 #pragma warning(disable:4786 4996)
00026 #endif
00027
00028 #include <string>
00029
00035 class NEDElementUserData
00036 {
00037 public:
00039 NEDElementUserData() {}
00040
00042 virtual ~NEDElementUserData() {}
00043 };
00044
00054 class NEDElement
00055 {
00056 private:
00057 long id;
00058 std::string srcloc;
00059 NEDElement *parent;
00060 NEDElement *firstchild;
00061 NEDElement *lastchild;
00062 NEDElement *prevsibling;
00063 NEDElement *nextsibling;
00064 NEDElementUserData *userdata;
00065 static long lastid;
00066
00067 protected:
00068 static bool stringToBool(const char *s);
00069 static const char *boolToString(bool b);
00070 static int stringToEnum(const char *s, const char *vals[], int nums[], int n);
00071 static const char *enumToString(int b, const char *vals[], int nums[], int n);
00072
00073 public:
00076
00080 NEDElement();
00081
00085 NEDElement(NEDElement *parent);
00086
00090 virtual ~NEDElement();
00092
00095
00100 virtual const char *getTagName() const = 0;
00101
00106 virtual int getTagCode() const = 0;
00107
00111 virtual long getId() const;
00112
00116 virtual void setId(long id);
00117
00122 virtual const char *getSourceLocation() const;
00123
00128 virtual void setSourceLocation(const char *loc);
00130
00133
00140 virtual void applyDefaults();
00141
00146 virtual int getNumAttributes() const = 0;
00147
00155 virtual const char *getAttributeName(int k) const = 0;
00156
00161 virtual int lookupAttribute(const char *attr) const;
00162
00171 virtual const char *getAttribute(int k) const = 0;
00172
00179 virtual const char *getAttribute(const char *attr) const;
00180
00189 virtual void setAttribute(int k, const char *value) = 0;
00190
00197 virtual void setAttribute(const char *attr, const char *value);
00198
00206 virtual const char *getAttributeDefault(int k) const = 0;
00207
00214 virtual const char *getAttributeDefault(const char *attr) const;
00216
00219
00223 virtual NEDElement *getParent() const;
00224
00229 virtual NEDElement *getFirstChild() const;
00230
00235 virtual NEDElement *getLastChild() const;
00236
00252 virtual NEDElement *getNextSibling() const;
00253
00258 virtual NEDElement *getPrevSibling() const;
00259
00265 virtual void appendChild(NEDElement *node);
00266
00274 virtual void insertChildBefore(NEDElement *where, NEDElement *newnode);
00275
00281 virtual NEDElement *removeChild(NEDElement *node);
00282
00287 virtual NEDElement *getFirstChildWithTag(int tagcode) const;
00288
00303 virtual NEDElement *getNextSiblingWithTag(int tagcode) const;
00304
00308 virtual int getNumChildren() const;
00309
00313 virtual int getNumChildrenWithTag(int tagcode) const;
00315
00323 NEDElement *getFirstChildWithAttribute(int tagcode, const char *attr, const char *attrvalue=NULL);
00324
00329 NEDElement *getParentWithTag(int tagcode);
00331
00334
00338 virtual void setUserData(NEDElementUserData *data);
00339
00344 virtual NEDElementUserData *getUserData() const;
00346 };
00347
00348 #endif
00349