nedelement.h

Go to the documentation of this file.
00001 //==========================================================================
00002 // nedelement.h  -
00003 //
00004 //                     OMNeT++/OMNEST
00005 //            Discrete System Simulation in C++
00006 //
00007 // Contents:
00008 //   class NEDElement
00009 //
00010 //==========================================================================
00011 
00012 /*--------------------------------------------------------------*
00013   Copyright (C) 2002-2008 Andras Varga
00014   Copyright (C) 2006-2008 OpenSim Ltd.
00015 
00016   This file is distributed WITHOUT ANY WARRANTY. See the file
00017   `license' for details on this and other legal matters.
00018 *--------------------------------------------------------------*/
00019 
00020 #ifndef __NEDELEMENT_H
00021 #define __NEDELEMENT_H
00022 
00023 #ifdef _MSC_VER
00024 // disable 4996: VC8.0 warnings on Unix syscalls
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 
Generated on Tue Dec 2 11:16:31 2014 for OMNeT++ NEDXML by  doxygen 1.6.3