1 #if !defined(__types_h) // Sentry, use file only if it's not already included. 10 #define CNSPRIORITY 90 11 #define FACTORYPRIORITY 90 23 typedef signed char int8;
24 typedef unsigned char uint8;
26 typedef unsigned short uint16;
28 typedef unsigned int uint32;
29 typedef long long int64;
30 typedef unsigned long long uint64;
31 typedef float float32;
32 typedef double float64;
38 typedef signed char int8;
39 typedef unsigned char uint8;
41 typedef unsigned short uint16;
43 typedef unsigned int uint32;
44 typedef float float32;
45 typedef double float64;
49 typedef long long int64;
50 typedef unsigned long long uint64;
52 typedef long long int64;
53 typedef unsigned long long uint64;
58 #define INT32_NOVALUE 0x12345678 59 #define INT64_NOVALUE 0x123456789ABCDEF0L 60 #define FLOAT64_NOVALUE 0.123456789123456789 62 #define MAXVALUINT8 ((uint8)~((uint8)0)) 63 #define MAXVALINT8 ((int8)(MAXVALUINT8 >> 1)) 64 #define MAXVALUINT16 ((uint16)~((uint16)0)) 65 #define MAXVALINT16 ((int16)(MAXVALUINT16 >> 1)) 66 #define MAXVALUINT32 ((uint32)~((uint32)0)) 67 #define MAXVALINT32 ((int32)(MAXVALUINT32 >> 1)) 68 #define MAXVALUINT64 ((uint64)~((uint64)0)) 69 #define MAXVALINT64 ((int64)(MAXVALUINT64 >> 1)) 71 #define MERGEUINT3264(a,b) (((uint64)a)<<32)|((uint64)b) 72 #define GET1UINT3264(a) (uint32)((a & 0xffffffff00000000L)>>32) 73 #define GET2UINT3264(a) (uint32)(a & 0x00000000ffffffffL) 74 #define MERGEUINT1632(a,b) (((uint32)a)<<16)|((uint32)b) 75 #define GET1UINT1632(a) (uint16)((a & 0xffff0000L)>>16) 76 #define GET2UINT1632(a) (uint16)(a & 0x0000ffffL) 78 #define PSYTYPELEVELS 16 81 uint16 levels[PSYTYPELEVELS];
82 bool isValid() {
return (levels[0] != 0);}
83 bool operator==(
const PsyType &othertype)
const {
84 return memcmp(levels, othertype.levels,
sizeof(
PsyType)) == 0;
86 bool operator!=(
const PsyType &othertype)
const {
87 return memcmp(levels, othertype.levels,
sizeof(
PsyType)) != 0;
89 bool operator<(
const PsyType &othertype)
const {
90 for (uint32 n = 0; n < PSYTYPELEVELS; n++) {
91 if (levels[n] < othertype.levels[n])
93 else if (levels[n] > othertype.levels[n])
98 bool operator>(
const PsyType &othertype)
const {
99 for (uint32 n = 0; n < PSYTYPELEVELS; n++) {
100 if (levels[n] > othertype.levels[n])
102 else if (levels[n] < othertype.levels[n])
107 uint16 operator[](
int i)
const {
108 if ((i < 0) && (i >= PSYTYPELEVELS))
112 bool setLevel(
int i, uint16 value) {
113 if ((i < 0) && (i >= PSYTYPELEVELS))
118 bool matches(
PsyType& otherType)
const {
119 for (uint32 n = 0; n < PSYTYPELEVELS; n++) {
120 if ((levels[n] != otherType.levels[n]) && (levels[n] != 0xFFFF) && (otherType.levels[n] != 0xFFFF))
139 std::string toString() {
142 std::stringstream ss;
144 for (uint32 n = 1; n < PSYTYPELEVELS; n++) {
146 ss <<
'.' << levels[n];
150 std::string toString(std::map<uint16, std::string>* subtypes) {
156 std::map<uint16, std::string>::iterator i, e = subtypes->end();
157 std::stringstream ss;
158 if ((i = subtypes->find(levels[0])) != e)
162 for (uint32 n = 1; n < PSYTYPELEVELS; n++) {
164 if ((i = subtypes->find(levels[n])) != e)
165 ss <<
'.' << i->second;
167 ss <<
'.' << levels[n];
172 bool fromString(
const char* text) {
175 memset(levels, 0,
sizeof(
PsyType));
177 const char* pstr = text;
178 const char* src = text;
179 char *temp =
new char[16];
182 while (pstr = strstr(src,
".")) {
184 memcpy(temp, src, pstr - src);
185 temp[pstr - src] = 0;
186 levels[n] = atoi(temp);
188 if (n == PSYTYPELEVELS)
193 pstr = src + strlen(src);
195 memcpy(temp, src, pstr - src);
196 temp[pstr - src] = 0;
197 levels[n] = atoi(temp);
205 #define PSYCONTEXTLEVELS 16 208 uint16 levels[PSYCONTEXTLEVELS];
212 bool isValid() {
return (levels[0] != 0);}
213 bool operator==(
const PsyContext &othercontext)
const {
214 return memcmp(levels, othercontext.levels,
sizeof(
PsyContext)) == 0;
216 bool operator!=(
const PsyContext &othercontext)
const {
217 return memcmp(levels, othercontext.levels,
sizeof(
PsyContext)) != 0;
219 bool operator<(
const PsyContext &othercontext)
const {
220 for (uint32 n = 0; n < PSYCONTEXTLEVELS; n++) {
221 if (levels[n] < othercontext.levels[n])
223 else if (levels[n] > othercontext.levels[n])
228 bool operator>(
const PsyContext &othercontext)
const {
229 for (uint32 n = 0; n < PSYCONTEXTLEVELS; n++) {
230 if (levels[n] > othercontext.levels[n])
232 else if (levels[n] < othercontext.levels[n])
237 uint16 operator[](
int i)
const {
238 if ((i < 0) && (i >= PSYCONTEXTLEVELS))
242 bool setLevel(
int i, uint16 value) {
243 if ((i < 0) && (i >= PSYCONTEXTLEVELS))
248 bool matches(
const PsyContext& othercontext)
const {
249 for (uint32 n = 0; n < PSYCONTEXTLEVELS; n++) {
250 if ((levels[n] != othercontext.levels[n]) &&
251 (levels[n] != 0xFFFF) &&
252 (othercontext.levels[n] != 0xFFFF) &&
254 (othercontext.levels[n] != 0)
260 std::string toString() {
263 std::stringstream ss;
265 for (uint32 n = 1; n < PSYCONTEXTLEVELS; n++) {
267 ss <<
'.' << levels[n];
271 std::string toString(std::map<uint16, std::string>* subcontexts) {
277 std::map<uint16, std::string>::iterator i, e = subcontexts->end();
278 std::stringstream ss;
279 if ((i = subcontexts->find(levels[0])) != e)
283 for (uint32 n = 1; n < PSYTYPELEVELS; n++) {
285 if ((i = subcontexts->find(levels[n])) != e)
286 ss <<
'.' << i->second;
288 ss <<
'.' << levels[n];
293 bool fromString(
const char* text) {
298 const char* pstr = text;
299 const char* src = text;
300 char *temp =
new char[16];
303 while (pstr = strstr(src,
".")) {
305 memcpy(temp, src, pstr - src);
306 temp[pstr - src] = 0;
307 levels[n] = atoi(temp);
309 if (n == PSYCONTEXTLEVELS)
314 pstr = src + strlen(src);
316 memcpy(temp, src, pstr - src);
317 temp[pstr - src] = 0;
318 levels[n] = atoi(temp);
325 #define CONTEXT_OTHER_ROOT 0 326 #define CONTEXT_EQUAL 1 327 #define CONTEXT_SUPERSEDES 2 328 #define CONTEXT_INCLUDED 3 330 uint8 compare(
const PsyContext& othercontext)
const {
331 for (uint32 n = 0; n < PSYCONTEXTLEVELS; n++) {
332 if ((levels[n] != othercontext.levels[n]) && (levels[n] != 0xFFFF) && (othercontext.levels[n] != 0xFFFF)) {
334 return CONTEXT_OTHER_ROOT;
335 else if (levels[n] == 0) {
336 if (othercontext.levels[n] == 0)
337 return CONTEXT_EQUAL;
339 return CONTEXT_INCLUDED;
345 return CONTEXT_SUPERSEDES;
348 return CONTEXT_EQUAL;
352 static struct PsyType NOTYPE = { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } };
353 static struct PsyContext NOCONTEXT = { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } };