COVISE Core
coObjID.h
Go to the documentation of this file.
1/* This file is part of COVISE.
2
3 You can use it under the terms of the GNU Lesser General Public License
4 version 2.1 or later, see lgpl-2.1.txt.
5
6 * License: LGPL 2+ */
7
8#ifndef _CO_OBJID_H_
9#define _CO_OBJID_H_
10
11// 25.09.98
12
13#include <iostream>
14#include "coTypes.h"
15#ifdef WIN32
16#include "unixcompat.h"
17#endif
18#include <stdio.h>
19#include <cstring>
20#include <string>
21
22#ifndef INLINE
23#define INLINE inline
24#endif
25
26namespace covise
27{
28
29class coDistributedObject;
30
32struct coObjID
33{
35 : portID(0)
36 , modID(0)
37 , seqNo(0)
38 , id(NULL)
39 {
40 }
41 coObjID(const char *name)
42 : portID(0)
43 , modID(0)
44 , seqNo(0)
45 , id(NULL)
46 {
47 if (name)
48 {
49 id = new char[strlen(name) + 1];
50 strcpy(id, name);
51 }
52 }
54 : portID(0)
55 , modID(0)
56 , seqNo(0)
57 , id(NULL)
58 {
59 if (name.length() > 0)
60 {
61 id = new char[name.length() + 1];
62 strcpy(id, name.c_str());
63 }
64 }
67 , modID(src.modID)
68 , seqNo(src.seqNo)
69 , id(NULL)
70 {
71 if (src.id)
72 {
73 id = new char[strlen(src.id) + 1];
74 strcpy(id, src.id);
75 }
76 }
78 {
79 portID = src.portID;
80 modID = src.modID;
81 seqNo = src.seqNo;
82 id = NULL;
83 if (src.id)
84 {
85 id = new char[strlen(src.id) + 1];
86 strcpy(id, src.id);
87 }
88 return *this;
89 }
90 // WARNING: if anything else than integers here: major changes in send/recv
91 // for any changes: change shm/coDoHdr.h
92 int portID;
93 int modID;
94 int seqNo;
95 char *id;
96
97 int getModID() const
98 {
99 return modID;
100 }
101 int getPortID() const
102 {
103 return portID;
104 ;
105 }
106 int getHash() const
107 {
108 return (((portID & 0x00000007)) // 3 bit Mod-ID
109 | ((modID & 0x00000007) << 3) // 3 bit Port-ID
110 | ((seqNo & 0x00000007) << 6));
111 } // 3 bit sequence
112
113 int getSeqNo() const
114 {
115 return seqNo;
116 }
118 {
119 seqNo = portID = modID = -1;
120 }
121 int isValid() const
122 {
123 return (seqNo > 0) && (portID > 0) && (modID > 0);
124 }
125 const char *getString() const
126 {
127 static char name[500];
128 snprintf(name, sizeof(name), "coObjID(m=%d,p=%d,seq%d)", modID, portID, seqNo);
129 name[sizeof(name) - 1] = '\0';
130 return name;
131 }
132
133 UTILEXPORT static int compare(const coObjID &a, const coObjID &b);
134};
135
136UTILEXPORT std::ostream &operator<<(std::ostream &, const coObjID &);
137
138// enough for all hash entries...
139enum
140{
143
144UTILEXPORT int compare(const coObjID &a, const coObjID &b);
145
146INLINE bool operator<(const coObjID &a, const coObjID &b)
147{
148 return (coObjID::compare(a, b) < 0);
149}
150
151INLINE bool operator>(const coObjID &a, const coObjID &b)
152{
153 return (coObjID::compare(a, b) > 0);
154}
155
156INLINE bool operator<=(const coObjID &a, const coObjID &b)
157{
158 return (coObjID::compare(a, b) <= 0);
159}
160
161INLINE bool operator>=(const coObjID &a, const coObjID &b)
162{
163 return (coObjID::compare(a, b) >= 0);
164}
165
166INLINE bool operator==(const coObjID &a, const coObjID &b)
167{
168 return (coObjID::compare(a, b) == 0);
169}
170
171INLINE bool operator!=(const coObjID &a, const coObjID &b)
172{
173 return (coObjID::compare(a, b) != 0);
174}
175
181{
182
183private:
184 // Copy-Constructor: NOT IMPLEMENTED
186
187 // Assignment operator: NOT IMPLEMENTED
189
190 // Default constructor: NOT IMPLEMENTED
192
193 // My last ObjID
195
196 // sequence number increment
198
199public:
201 coObjIDMaker(int32_t modID, int portID, int seqInc = 1, int firstSeqNo = 1)
202 {
203 d_objID.modID = modID;
204 d_objID.portID = portID;
205 d_objID.seqNo = firstSeqNo;
206 d_seqInc = seqInc;
207 }
208
211 {
213 return d_objID;
214 }
215
216 // get a new Sequence Number
218 {
219 return d_objID;
220 }
221
224};
225
230struct UTILEXPORT coObjInfo // if changing this, change in co{Send,Recv}Buffer, too
231{
232
233 static int sequence;
234 static char *baseName;
236 {
237 blockNo = numBlocks = timeStep = numTimeSteps = -1;
238 time = -1.0f;
239 reqModID = 0;
240 }
241 coObjInfo(const char *name)
242 {
243 blockNo = numBlocks = timeStep = numTimeSteps = -1;
244 time = -1.0f;
245 reqModID = 0;
246 if (baseName)
247 {
248 if (strlen(name) == 0)
249 {
250 id = baseName;
251 }
252 else
253 {
254 char *n;
255 if (baseName)
256 {
257 size_t l = strlen(baseName) + strlen(name) + 50;
258 n = new char[l];
259 snprintf(n, l, "%s_%d_%s", name, sequence, baseName);
260 n[l - 1] = '\0';
261 }
262 else
263 {
264 size_t l = strlen(name) + 50;
265 n = new char[l];
266 snprintf(n, l, "%s_%d", name, sequence);
267 n[l - 1] = '\0';
268 }
269 sequence++;
270 id = n;
271 delete[] n;
272 }
273 }
274 else
275 id = name;
276 }
278 {
279 blockNo = numBlocks = timeStep = numTimeSteps = -1;
280 time = -1.0f;
281 reqModID = 0;
282 id = name;
283 }
284 static void setBaseName(const char *bn)
285 {
286 delete[] baseName;
287 sequence = 0;
288 if (bn)
289 {
290 baseName = new char[strlen(bn) + 1];
291 strcpy(baseName, bn);
292 }
293 else
294 baseName = NULL;
295 };
296 enum
297 {
299 TIMESTEP_ALL = -1,
300 NUM_TIMESTEPS_INFINIT = -1
301 };
302
304 int blockNo, numBlocks, timeStep, numTimeSteps;
305 float time;
306 int32_t reqModID; // needed for Object request only: modID of asking module
307
308 const char *getName() const
309 {
310 return id.id;
311 }
312};
313
314UTILEXPORT std::ostream &operator<<(std::ostream &, const coObjInfo &);
315
317{
318 return ((coObjID::compare(a.id, b.id) == 0)
319 && (a.blockNo == b.blockNo)
320 && (a.numBlocks == b.numBlocks)
321 && (a.timeStep == b.timeStep)
322 && (a.numTimeSteps == b.numTimeSteps)
323 && (a.time == b.time));
324}
325}
326
327#endif
#define UTILEXPORT
Definition: coExport.h:206
#define INLINE
Definition: coObjID.h:23
#define NULL
Definition: covise_list.h:22
GLsizei const GLchar *const * string
Definition: khronos-glext.h:6750
GLdouble n
Definition: khronos-glext.h:8447
GLenum src
Definition: khronos-glext.h:7031
GLboolean GLboolean GLboolean b
Definition: khronos-glext.h:6895
GLuint const GLchar * name
Definition: khronos-glext.h:6722
GLboolean GLboolean GLboolean GLboolean a
Definition: khronos-glext.h:6895
GLenum GLuint id
Definition: khronos-glext.h:6279
list of all chemical elements
Definition: coConfig.h:27
INLINE bool operator>=(const coObjID &a, const coObjID &b)
Definition: coObjID.h:161
INLINE bool operator<(const coObjID &a, const coObjID &b)
Definition: coObjID.h:146
UTILEXPORT int compare(const coObjID &a, const coObjID &b)
INLINE bool operator<=(const coObjID &a, const coObjID &b)
Definition: coObjID.h:156
INLINE bool operator>(const coObjID &a, const coObjID &b)
Definition: coObjID.h:151
INLINE bool operator!=(const coObjID &a, const coObjID &b)
Definition: coObjID.h:171
@ CO_OBJECT_ID_HASH_SIZE
Definition: coObjID.h:141
QTextStream & operator<<(QTextStream &out, const coConfigEntryStringList list)
Definition: coConfigEntryString.cpp:159
INLINE bool operator==(const coObjID &a, const coObjID &b)
Definition: coObjID.h:166
const int UNKNOWN
Definition: covise_shm.h:138
Object-ID structure.
Definition: coObjID.h:33
void setInvalid()
Definition: coObjID.h:117
coObjID & operator=(const coObjID &src)
Definition: coObjID.h:77
int getPortID() const
Definition: coObjID.h:101
const char * getString() const
Definition: coObjID.h:125
coObjID(const coObjID &src)
Definition: coObjID.h:65
int getHash() const
Definition: coObjID.h:106
coObjID(const std::string &name)
Definition: coObjID.h:53
char * id
Definition: coObjID.h:95
int seqNo
Definition: coObjID.h:94
int isValid() const
Definition: coObjID.h:121
int modID
Definition: coObjID.h:93
coObjID(const char *name)
Definition: coObjID.h:41
int getModID() const
Definition: coObjID.h:97
int getSeqNo() const
Definition: coObjID.h:113
coObjID()
Definition: coObjID.h:34
int portID
Definition: coObjID.h:92
static UTILEXPORT int compare(const coObjID &a, const coObjID &b)
Definition: coObjID.cpp:29
Definition: coObjID.h:181
~coObjIDMaker()
Destructor.
Definition: coObjID.h:223
coObjIDMaker & operator=(const coObjIDMaker &)
coObjID getLastID()
Definition: coObjID.h:217
int d_seqInc
Definition: coObjID.h:197
coObjID getNewID()
get a new Sequence Number
Definition: coObjID.h:210
coObjID d_objID
Definition: coObjID.h:194
coObjIDMaker(const coObjIDMaker &)
coObjIDMaker(int32_t modID, int portID, int seqInc=1, int firstSeqNo=1)
Constructor: set Module-ID, Port-ID, sequence increment and start value.
Definition: coObjID.h:201
Definition: coObjID.h:231
coObjID id
Definition: coObjID.h:303
coObjInfo(const std::string &name)
Definition: coObjID.h:277
int blockNo
Definition: coObjID.h:304
static void setBaseName(const char *bn)
Definition: coObjID.h:284
static char * baseName
Definition: coObjID.h:234
float time
Definition: coObjID.h:305
coObjInfo(const char *name)
Definition: coObjID.h:241
int32_t reqModID
Definition: coObjID.h:306
static int sequence
Definition: coObjID.h:233
const char * getName() const
Definition: coObjID.h:308
coObjInfo()
Definition: coObjID.h:235