00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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;
00069 char *bufferend;
00070 Tag *tags;
00071 int numtags;
00072
00073 mutable char *dispstr;
00074 mutable bool needsassemble;
00075
00076
00077 cObject *object;
00078 enum {NONE, CONNECTION, MODULE, MODULEBACKGROUND} role;
00079
00080 private:
00081
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
00091 void notify();
00092
00093 public:
00094
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
00197 bool removeTag(const char *tagname);
00199
00202
00207 int getNumTags() const;
00208
00213 const char *getTagName(int tagindex) const;
00214
00222 int getNumArgs(int tagindex) const;
00223
00229 const char *getTagArg(int tagindex, int index) const;
00230
00240 bool setTagArg(int tagindex, int index, const char *value);
00241
00249 int insertTag(const char *tagname, int atindex=0);
00250
00256 bool removeTag(int tagindex);
00258 };
00259
00260
00261 #endif
00262
00263