nedelement.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __NEDELEMENT_H
00021 #define __NEDELEMENT_H
00022
00023 #ifdef _MSC_VER
00024
00025 #pragma warning(disable: 4996)
00026 #endif
00027
00028 #include <string>
00029 #include "nedxmldefs.h"
00030
00031 NAMESPACE_BEGIN
00032
00033
00039 class NEDXML_API NEDElementUserData
00040 {
00041 public:
00043 NEDElementUserData() {}
00044
00046 virtual ~NEDElementUserData() {}
00047 };
00048
00049
00056 struct NEDSourceRegion
00057 {
00058 NEDSourceRegion() {startLine=startColumn=endLine=endColumn=0;}
00059 int startLine;
00060 int startColumn;
00061 int endLine;
00062 int endColumn;
00063 };
00064
00074 class NEDXML_API NEDElement
00075 {
00076 private:
00077 long id;
00078 std::string srcloc;
00079 NEDSourceRegion srcregion;
00080 NEDElement *parent;
00081 NEDElement *firstchild;
00082 NEDElement *lastchild;
00083 NEDElement *prevsibling;
00084 NEDElement *nextsibling;
00085 NEDElementUserData *userdata;
00086
00087 static long lastid;
00088 static long numcreated;
00089 static long numexisting;
00090
00091 protected:
00092 static bool stringToBool(const char *s);
00093 static const char *boolToString(bool b);
00094 static int stringToEnum(const char *s, const char *vals[], int nums[], int n);
00095 static const char *enumToString(int b, const char *vals[], int nums[], int n);
00096 static void validateEnum(int b, const char *vals[], int nums[], int n);
00097
00098 public:
00101
00105 NEDElement();
00106
00110 NEDElement(NEDElement *parent);
00111
00115 virtual ~NEDElement();
00116
00121 virtual NEDElement *dup() const = 0;
00122
00126 virtual NEDElement *dupTree() const;
00128
00131
00136 virtual const char *getTagName() const = 0;
00137
00142 virtual int getTagCode() const = 0;
00143
00147 virtual long getId() const;
00148
00152 virtual void setId(long id);
00153
00158 virtual const char *getSourceLocation() const;
00159
00164 virtual void setSourceLocation(const char *loc);
00165
00170 virtual const NEDSourceRegion& getSourceRegion() const;
00171
00176 virtual void setSourceRegion(const NEDSourceRegion& region);
00178
00181
00188 virtual void applyDefaults();
00189
00194 virtual int getNumAttributes() const = 0;
00195
00203 virtual const char *getAttributeName(int k) const = 0;
00204
00209 virtual int lookupAttribute(const char *attr) const;
00210
00219 virtual const char *getAttribute(int k) const = 0;
00220
00227 virtual const char *getAttribute(const char *attr) const;
00228
00237 virtual void setAttribute(int k, const char *value) = 0;
00238
00245 virtual void setAttribute(const char *attr, const char *value);
00246
00255 virtual const char *getAttributeDefault(int k) const = 0;
00256
00263 virtual const char *getAttributeDefault(const char *attr) const;
00265
00268
00272 virtual NEDElement *getParent() const;
00273
00278 virtual NEDElement *getFirstChild() const;
00279
00284 virtual NEDElement *getLastChild() const;
00285
00301 virtual NEDElement *getNextSibling() const;
00302
00307 virtual NEDElement *getPrevSibling() const;
00308
00314 virtual void appendChild(NEDElement *node);
00315
00324 virtual void insertChildBefore(NEDElement *where, NEDElement *newnode);
00325
00331 virtual NEDElement *removeChild(NEDElement *node);
00332
00337 virtual NEDElement *getFirstChildWithTag(int tagcode) const;
00338
00353 virtual NEDElement *getNextSiblingWithTag(int tagcode) const;
00354
00358 virtual int getNumChildren() const;
00359
00363 virtual int getNumChildrenWithTag(int tagcode) const;
00365
00373 NEDElement *getFirstChildWithAttribute(int tagcode, const char *attr, const char *attrvalue=NULL);
00374
00379 NEDElement *getParentWithTag(int tagcode);
00381
00384
00388 static long getNumCreated() {return numcreated;}
00389
00394 static long getNumExisting() {return numexisting;}
00396
00397
00400
00404 virtual void setUserData(NEDElementUserData *data);
00405
00410 virtual NEDElementUserData *getUserData() const;
00412 };
00413
00414 NAMESPACE_END
00415
00416
00417 #endif
00418