cdispstr.h

00001 //==========================================================================
00002 //   CDISPSTR.H  - part of
00003 //                     OMNeT++/OMNEST
00004 //            Discrete System Simulation in C++
00005 //
00006 //
00007 //  Declaration of the following classes:
00008 //    cDisplayString : utility class for display string manipulation
00009 //
00010 //==========================================================================
00011 
00012 /*--------------------------------------------------------------*
00013   Copyright (C) 1992-2005 Andras Varga
00014 
00015   This file is distributed WITHOUT ANY WARRANTY. See the file
00016   `license' for details on this and other legal matters.
00017 *--------------------------------------------------------------*/
00018 
00019 #ifndef __CDISPSTR_H
00020 #define __CDISPSTR_H
00021 
00022 #include "cobject.h"
00023 
00024 
00025 #define MAXARGS 16
00026 
00027 
00060 class SIM_API cDisplayString
00061 {
00062   private:
00063     struct Tag {
00064        char *name;
00065        int numargs;
00066        char *args[MAXARGS];
00067     };
00068     char *buffer;       // holds pieces of display string (sliced with zeroes)
00069     char *bufferend;    // points to last byte of buffer allocated
00070     Tag *tags;          // table of tags
00071     int numtags;        // number of tags
00072 
00073     mutable char *dispstr; // cached copy of assembled display string
00074     mutable bool needsassemble; // if dispstr is up-to-date
00075 
00076     // needed to notify Envir
00077     cObject *object;     // a cModule or cGate pointer
00078     enum {NONE, CONNECTION, MODULE, MODULEBACKGROUND} role; // what
00079 
00080   private:
00081     // helper functions
00082     bool parse();
00083     void assemble() const;
00084     int gettagindex(const char *tagname) const;
00085     void cleartags();
00086     bool isinbuffer(char *s) {return s>=buffer && s<=bufferend;}
00087     static void strcatescaped(char *d, const char *s);
00088 
00089   private:
00090     // internal: called when the stored display string changes, and notifies Envir in turn.
00091     void notify();
00092 
00093   public:
00094     // internal:
00095     void setRoleToConnection(cGate *gate) {object=gate; role=CONNECTION;}
00096     void setRoleToModule(cModule *submodule) {object=submodule; role=MODULE;}
00097     void setRoleToModuleBackground(cModule *module) {object=module; role=MODULEBACKGROUND;}
00098 
00099   public:
00102 
00106     cDisplayString();
00107 
00111     cDisplayString(const char *dispstr);
00112 
00116     cDisplayString(const cDisplayString& ds);
00117 
00121     ~cDisplayString();
00123 
00129     cDisplayString& operator=(const cDisplayString& ds) {parse(ds.getString()); return *this;}
00130 
00134     cDisplayString& operator=(const char *s)  {parse(s); return *this;}
00135 
00139     operator const char *() const  {return getString();}
00141 
00144 
00148     const char *getString() const;
00149 
00154     bool parse(const char *displaystr);
00156 
00159 
00163     bool existsTag(const char *tagname) const;
00164 
00172     int getNumArgs(const char *tagname) const;
00173 
00179     const char *getTagArg(const char *tagname, int index) const;
00180 
00190     bool setTagArg(const char *tagname, int index, const char *value);
00191 
00196     bool setTagArg(const char *tagname, int index, long value);
00197 
00203     bool removeTag(const char *tagname);
00205 
00208 
00213     int getNumTags() const;
00214 
00219     const char *getTagName(int tagindex) const;
00220 
00228     int getNumArgs(int tagindex) const;
00229 
00235     const char *getTagArg(int tagindex, int index) const;
00236 
00246     bool setTagArg(int tagindex, int index, const char *value);
00247 
00255     int insertTag(const char *tagname, int atindex=0);
00256 
00262     bool removeTag(int tagindex);
00264 };
00265 
00266 
00267 #endif
00268 
00269 

Generated on Sat Oct 21 17:47:55 2006 for OMNeT++/OMNEST Simulation Library by  doxygen 1.4.6