16 if (compData != NULL) {
17 if (_stricmp(name, compData->header->
name) == 0) {
18 if ((nodeID != compData->header->
nodeID) && (compData->header->
nodeID)) {
23 compData->header->
nodeID = nodeID;
24 compData->header->
procID = procID;
29 char* data = MemoryManager::CreateAndLockNewSystemPage(size, pageID);
34 InsertComponentPageID(
id, pageID, nodeID, procID, name);
40 header->nodeID = nodeID;
41 header->procID = procID;
42 header->pageID = pageID;
57 if (compData != NULL) {
58 if (_stricmp(name, compData->header->
name) == 0) {
59 if (nodeID == compData->header->
nodeID) {
63 else if (compData->header->
nodeID == 0) {
64 compData->header->
nodeID = nodeID;
75 char* data = MemoryManager::CreateAndLockNewSystemPage(
sizeof(
COMPONENTDATAHEADER), pageID);
80 InsertComponentPageID(
id, pageID, nodeID, 0, name);
84 header->createdTime = time;
86 header->nodeID = nodeID;
88 header->pageID = pageID;
90 MemoryManager::UnlockSystemBlock(pageID);
98 if (compData != NULL) {
105 char* data = MemoryManager::CreateAndLockNewSystemPage(
sizeof(
COMPONENTDATAHEADER), pageID);
110 InsertComponentPageID(
id, pageID, 0, 0, name);
114 header->createdTime = 0;
118 header->pageID = pageID;
120 MemoryManager::UnlockSystemBlock(pageID);
127 if (!GetComponentPageID(cid, pageID))
130 char* data = MemoryManager::GetAndLockSystemBlock(pageID, size);
134 char* newData = (
char*)malloc(size);
135 memcpy(newData, data, size);
137 MemoryManager::UnlockSystemBlock(pageID);
138 MemoryManager::DestroySystemPage(pageID);
147 char* data = MemoryManager::CreateAndLockNewSystemPage(dataSize, pageID);
154 InsertComponentPageID(cid, pageID, nodeID, procID, header->name);
155 memcpy(data, oldData, dataSize);
159 header->nodeID = nodeID;
160 header->procID = procID;
161 header->pageID = pageID;
163 MemoryManager::UnlockSystemBlock(pageID);
171 InsertComponentPageID(cid, 0, nodeID, procID, name);
181 if (!GetComponentPageID(cid, pageID))
183 if ( (!(header = (
COMPONENTDATAHEADER*)MemoryManager::GetAndLockSystemBlock(pageID, size))) || (header->procID == 0))
187 header->stats.runCount += runCount;
188 header->stats.runUserTime += userCPU;
189 header->stats.runKernelTime += kernelCPU;
191 header->stats.msgInCount++;
192 header->stats.msgInBytes += inputMsg->
getSize();
197 header->stats.msgOutCount++;
198 header->stats.msgOutBytes += outputMsg->
getSize();
203 MemoryManager::UnlockSystemBlock(pageID);
213 FreeComponentID(cid);
227 if (!GetComponentPageID(cid, pageID))
230 char* data = MemoryManager::GetAndLockSystemBlock(pageID, size);
239bool ComponentData::GetComponentPageID(uint32 cid, uint32& pageID) {
241 if ((entry != NULL) && (entry->
id == cid) && (entry->
time != 0)) {
243 UnlockComponentMap();
248 UnlockComponentMap();
254bool ComponentData::InsertComponentPageID(uint32 cid, uint32 pageID, uint16 nodeID, uint16 procID,
const char* name) {
256 char* data = MemoryManager::GetAndLockSystemBlock(
ID_COMPMAPPAGE, dataSize);
260 ComponentMapHeader* cmHeader = (ComponentMapHeader*)data;
263 uint32 offset =
sizeof(ComponentMapHeader) + cmHeader->bitFieldSize +
264 cid *
sizeof(ComponentMapEntry);
265 if (offset > cmHeader->size) {
269 ComponentMapEntry* entry = (ComponentMapEntry*) (data+offset);
270 if ((entry->id == cid) || (entry->time == 0)) {
273 entry->nodeID = nodeID;
274 entry->procID = procID;
275 entry->pageID = pageID;
276 uint16 nameLen = (uint16)strlen(name);
282 strcpy(entry->name, name);
295bool ComponentData::GetNextAvailableComponentID(uint32& cid) {
297 char* data = MemoryManager::GetAndLockSystemBlock(
ID_COMPMAPPAGE, dataSize);
301 ComponentMapHeader* cmHeader = (ComponentMapHeader*)data;
316bool ComponentData::FreeComponentID(uint32 cid) {
318 char* data = MemoryManager::GetAndLockSystemBlock(
ID_COMPMAPPAGE, dataSize);
322 ComponentMapHeader* cmHeader = (ComponentMapHeader*)data;
323 ComponentMapEntry* entry;
326 uint32 offset =
sizeof(ComponentMapHeader) + cmHeader->bitFieldSize +
327 cid *
sizeof(ComponentMapEntry);
328 if (offset > cmHeader->size) {
334 entry = (ComponentMapEntry*) (data+offset);
339 utils::SetBit(cid,
BITFREE, (uint32*)((
char*)cmHeader +
sizeof(ComponentMapHeader)), cmHeader->bitFieldSize);
350 if ((entry != NULL) && (entry->
id == cid) && (entry->
time != 0)) {
351 uint16 nodeID = entry->
nodeID;
352 UnlockComponentMap();
356 UnlockComponentMap();
364 if ((entry != NULL) && (entry->
id == cid) && (entry->
time != 0) && (entry->
pageID != 0)) {
365 uint16 procID = entry->
procID;
366 UnlockComponentMap();
370 UnlockComponentMap();
379 if ((entry != NULL) && (entry->
id == cid) && (entry->
time != 0)) {
380 uint16 procID = entry->
procID;
381 UnlockComponentMap();
382 return (procID != 0);
385 UnlockComponentMap();
393 if ((entry != NULL) && (entry->
id == cid) && (entry->
time != 0)) {
394 if (strlen(entry->
name) < maxNameLen)
395 strcpy(name, entry->
name);
397 memcpy(name, entry->
name, maxNameLen-1);
398 name[maxNameLen-1] = 0;
400 UnlockComponentMap();
404 UnlockComponentMap();
415 if (GetComponentPageID(cid, pageID)) {
416 if ((data = MemoryManager::GetAndLockSystemBlock(pageID, size)) &&
422 MemoryManager::UnlockSystemBlock(pageID);
431 if (GetComponentPageID(cid, pageID)) {
432 if ((data = MemoryManager::GetAndLockSystemBlock(pageID, size)) &&
435 MemoryManager::UnlockSystemBlock(pageID);
439 MemoryManager::UnlockSystemBlock(pageID);
446 char* data = MemoryManager::GetAndLockSystemBlock(
ID_COMPMAPPAGE, dataSize);
453 char* endEntry = data + dataSize;
454 while ((
char*)entry < endEntry) {
455 if (strcmp(name, entry->
name) == 0) {
489 MemoryManager::UnlockSystemBlock(header->pageID);
495 return (header->size -
sizeof(
COMPONENTDATAHEADER) - header->paramSize - header->dataSize);
499 uint32 newSize = header->size + increase;
501 char* data = MemoryManager::CreateAndLockNewSystemPage(newSize, pageID);
506 InsertComponentPageID(header->cid, pageID, header->nodeID, header->procID, header->name);
509 memcpy((
char*)newHeader, (
char*)header, header->
size);
510 newHeader->
size = newSize;
511 newHeader->
pageID = pageID;
513 uint32 oldPageID = header->pageID;
515 MemoryManager::UnlockSystemBlock(oldPageID);
516 MemoryManager::DestroySystemPage(oldPageID);
524 FreeComponentID(header->cid);
525 uint32 oldPageID = header->pageID;
527 MemoryManager::UnlockSystemBlock(oldPageID);
528 MemoryManager::DestroySystemPage(oldPageID);
536char* ComponentData::makeRoomForPrivateData(uint32 newSize) {
542 return (
char*)header +
sizeof(COMPONENTDATAHEADER) + header->
paramSize + header->
dataSize;
545char* ComponentData::makeRoomForParameter(uint32 newSize) {
550 char* paramSrc = (
char*)header +
sizeof(COMPONENTDATAHEADER);
551 char* dataSrc = (
char*)paramSrc + header->paramSize;
554 memcpy(dataSrc+newSize, dataSrc, header->dataSize);
556 memset(dataSrc, 0, newSize);
566 char* srcEnd = (
char*)header +
sizeof(
COMPONENTDATAHEADER) + header->paramSize + header->dataSize;
570 while ( src < srcEnd ) {
571 if (_stricmp(name, src +
sizeof(uint32)) == 0)
573 offset += *(uint32*)src;
574 src += *(uint32*)src;
578 uint32 nameLen = (uint32)strlen(name);
579 uint32 newSize =
sizeof(uint32) + nameLen + 1 + size;
580 char* newData = makeRoomForPrivateData(newSize);
585 *(uint32*) newData = newSize;
586 memcpy(newData +
sizeof(uint32), name, nameLen+1);
587 memcpy(newData +
sizeof(uint32) + nameLen+1, data, size);
590 header->dataSize += newSize;
596 char* srcEnd = (
char*)header +
sizeof(
COMPONENTDATAHEADER) + header->paramSize + header->dataSize;
599 while ( src < srcEnd ) {
600 if (_stricmp(name, src +
sizeof(uint32)) == 0)
601 return *(uint32*)src -
sizeof(uint32) - (uint32)strlen(src +
sizeof(uint32)) - 1;
602 src += *(uint32*)src;
609 char* srcEnd = (
char*)header +
sizeof(
COMPONENTDATAHEADER) + header->paramSize + header->dataSize;
611 uint32 size, nameLen;
613 while ( src < srcEnd ) {
614 if (_stricmp(name, src +
sizeof(uint32)) == 0) {
615 nameLen = (uint32)strlen(src +
sizeof(uint32));
616 size = *(uint32*)src -
sizeof(uint32) - nameLen - 1;
619 memcpy((
void*)data, src +
sizeof(uint32) + nameLen+1, size);
622 src += *(uint32*)src;
629 char* srcEnd = (
char*)header +
sizeof(
COMPONENTDATAHEADER) + header->paramSize + header->dataSize;
632 while ( src < srcEnd ) {
633 if (_stricmp(name, src +
sizeof(uint32)) == 0)
635 offset += *(uint32*)src;
636 src += *(uint32*)src;
644 uint32 nameLen = (uint32)strlen(src +
sizeof(uint32));
645 uint32 oldSize = *(uint32*)src -
sizeof(uint32) - nameLen - 1;
646 if (oldSize == size) {
647 memcpy(src +
sizeof(uint32) + nameLen + 1, data, size);
658 char* srcEnd = (
char*)header +
sizeof(
COMPONENTDATAHEADER) + header->paramSize + header->dataSize;
661 uint32 copySize = header->dataSize;
662 while ( src < srcEnd ) {
663 copySize -= *(uint32*)src;
664 if (_stricmp(name, src +
sizeof(uint32)) == 0) {
665 delSize = *(uint32*)src;
666 memcpy(src, src + *(uint32*)src, copySize);
668 header->dataSize -= delSize;
670 memset(srcEnd, 0, delSize);
673 src += *(uint32*)src;
693 while ( src < srcEnd ) {
694 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
696 src += *(uint32*)src;
700 uint32 nameLen = (uint32)strlen(name);
701 uint32 newSize = nameLen + 1 +
sizeof(
PARAMHEADER) + (uint32)strlen(val) + 1;
702 if (defaultValue != NULL)
703 newSize += (uint32)strlen(defaultValue) + 1;
705 newSize += (uint32)strlen(val) + 1;
707 char* newData = makeRoomForParameter(newSize);
713 pHeader->
size = newSize;
715 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
721 src += strlen(val) + 1;
723 if (defaultValue != NULL)
724 strcpy(src, defaultValue);
728 header->paramCount++;
729 header->paramSize += newSize;
738 while ( src < srcEnd ) {
739 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
741 src += *(uint32*)src;
746 uint32 nameLen = (uint32)strlen(name);
749 const char* pVal = val;
750 for (n=0; n<count; n++) {
751 len = (uint32)strlen(pVal) + 1;
757 char* newData = makeRoomForParameter(newSize);
763 pHeader->
size = newSize;
765 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
768 dHeader->
index = defaultIndex;
770 dHeader->
count = count;
775 header->paramCount++;
776 header->paramSize += newSize;
781 uint32 n, dlen, len = 0, dataSize = 0, defaultIndex = 0;
782 uint32 count = (uint32)values.size();
783 for (n=0; n<count; n++)
784 dataSize += (uint32)values[n].size() + 1;
785 char* val =
new char[dataSize];
786 for (n=0; n<count; n++) {
787 dlen = (uint32)values[n].size()+1;
788 memcpy(val+len, values[n].c_str(), dlen);
790 if (values[n] == defaultValue)
799 uint32 n, defaultIndex = 0;
800 uint32 count = (uint32)values.size();
801 int64* val =
new int64[count];
802 for (n=0; n<count; n++) {
804 if (val[n] == defaultValue)
813 uint32 n, defaultIndex = 0;
814 uint32 count = (uint32)values.size();
815 float64* val =
new float64[count];
816 for (n=0; n<count; n++) {
818 if (val[n] == defaultValue)
831 while ( src < srcEnd ) {
832 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
834 src += *(uint32*)src;
838 uint32 nameLen = (uint32)strlen(name);
841 char* newData = makeRoomForParameter(newSize);
847 pHeader->
size = newSize;
849 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
852 dHeader->
index = defaultIndex;
854 dHeader->
count = count;
857 memcpy((
char*)dHeader +
sizeof(
PARAMCOLLHEADER), val, count *
sizeof(int64));
859 header->paramCount++;
860 header->paramSize += newSize;
869 while ( src < srcEnd ) {
870 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
872 src += *(uint32*)src;
876 uint32 nameLen = (uint32)strlen(name);
879 char* newData = makeRoomForParameter(newSize);
885 pHeader->
size = newSize;
887 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
890 dHeader->
index = defaultIndex;
892 dHeader->
count = count;
895 memcpy((
char*)dHeader +
sizeof(
PARAMCOLLHEADER), val, count *
sizeof(float64));
897 header->paramCount++;
898 header->paramSize += newSize;
907 while ( src < srcEnd ) {
908 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
910 src += *(uint32*)src;
914 uint32 nameLen = (uint32)strlen(name);
917 char* newData = makeRoomForParameter(newSize);
923 pHeader->
size = newSize;
925 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
936 header->paramCount++;
937 header->paramSize += newSize;
946 while ( src < srcEnd ) {
947 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
949 src += *(uint32*)src;
953 uint32 nameLen = (uint32)strlen(name);
956 char* newData = makeRoomForParameter(newSize);
962 pHeader->
size = newSize;
964 memcpy(newData +
sizeof(
PARAMHEADER), name, nameLen+1);
975 header->paramCount++;
976 header->paramSize += newSize;
984 while ( src < srcEnd ) {
985 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0)
987 src += *(uint32*)src;
997 uint32 copySize = header->paramSize + header->dataSize;
998 while ( src < srcEnd ) {
999 copySize -= *(uint32*)src;
1000 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1001 delSize = *(uint32*)src;
1002 memcpy(src, src + delSize, copySize);
1003 header->paramCount--;
1004 header->paramSize -= delSize;
1006 srcEnd -= delSize + header->dataSize;
1007 memset(srcEnd, 0, delSize);
1010 src += *(uint32*)src;
1019 while ( src < srcEnd ) {
1020 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1022 return pHeader->
type;
1024 src += *(uint32*)src;
1034 while ( src < srcEnd ) {
1035 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1039 return sizeof(int64);
1041 return sizeof(float64);
1043 return ((uint32)strlen(pSrc) + 1);
1047 for (uint32 n=0; n<cHeader->
index; n++)
1048 pSrc += strlen(pSrc) + 1;
1049 return (uint32)strlen(pSrc) + 1;
1052 src += *(uint32*)src;
1062 while ( src < srcEnd ) {
1063 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1067 if (maxSize < strlen(pSrc) + 1)
1075 for (uint32 n=0; n<cHeader->
index; n++)
1076 pSrc += strlen(pSrc) + 1;
1077 if (maxSize < strlen(pSrc) + 1)
1085 src += *(uint32*)src;
1095 while ( src < srcEnd ) {
1096 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1100 val = *(int64*)(pSrc);
1106 val = *(int64*) pSrc;
1112 src += *(uint32*)src;
1122 while ( src < srcEnd ) {
1123 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1127 val = *(float64*)(pSrc);
1133 val = *(float64*) pSrc;
1139 src += *(uint32*)src;
1150 uint32 index, oldSize;
1151 while ( src < srcEnd ) {
1152 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1156 oldSize = (uint32)strlen(pSrc);
1157 if (strlen(val) == oldSize) {
1162 uint32 defaultSize = (uint32)strlen(pSrc + oldSize + 1) + 1;
1163 char* defaultValue =
new char[defaultSize];
1164 strcpy(defaultValue, pSrc + oldSize + 1);
1167 delete [] defaultValue;
1172 delete [] defaultValue;
1176 delete [] defaultValue;
1184 while (index < cHeader->count) {
1185 if (_stricmp(val, pSrc) == 0) {
1187 cHeader->
index = index;
1191 pSrc += strlen(pSrc) + 1;
1198 src += *(uint32*)src;
1209 while ( src < srcEnd ) {
1210 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1221 while (index < cHeader->count) {
1222 if (*(int64*)pSrc == val) {
1224 cHeader->
index = index;
1228 pSrc +=
sizeof(int64);
1235 src += *(uint32*)src;
1246 while ( src < srcEnd ) {
1247 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1259 while (index < cHeader->count) {
1260 if (*(float64*)pSrc == val) {
1262 cHeader->
index = index;
1266 pSrc +=
sizeof(int64);
1273 src += *(uint32*)src;
1284 while ( src < srcEnd ) {
1285 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1315 src += *(uint32*)src;
1330 while ( src < srcEnd ) {
1331 if (_stricmp(name, src +
sizeof(
PARAMHEADER)) == 0) {
1336 if ( (cHeader->
index + tweak >= 0) && (cHeader->
index + tweak < cHeader->count) ) {
1337 cHeader->
index += tweak;
1347 testInt = iHeader->
val + (tweak * iHeader->
interval);
1348 if ( (testInt >= iHeader->
minVal) && (testInt <= iHeader->maxVal) ) {
1349 iHeader->
val = testInt;
1357 testFloat = fHeader->
val + (tweak * fHeader->
interval);
1358 if ( (testFloat >= fHeader->
minVal) && (testFloat <= fHeader->maxVal) ) {
1359 fHeader->
val = testFloat;
1366 src += *(uint32*)src;
1384 char* data = MemoryManager::GetAndLockSystemBlock(
ID_COMPMAPPAGE, dataSize);
1392 if (offset > header->
size) {
1396 entry = (ComponentMapEntry*) (data+offset);
1397 if ((entry->
id ==
id) && (entry->
time != 0)) {
1407bool ComponentData::UnlockComponentMap() {
1420 uint32 maxPageCount = 100;
1421 if (!manager->
create(0, maxPageCount)) {
1422 unittest::fail(
"ComponentData test: MemoryManager init() failed");
1429 char* name =
new char[1024];
1430 strcpy(name,
"TestComponent");
1433 unittest::fail(
"ComponentData test: Could not create component data");
1439 char* str =
new char[1024];
1441 unittest::fail(
"ComponentData test: Could not get component name");
1446 if (strcmp(name, str) != 0) {
1447 unittest::fail(
"ComponentData test: Component name mismatch ('%s' != '%s')", name, str);
1455 unittest::fail(
"ComponentData test: Could not get component id");
1461 unittest::fail(
"ComponentData test: Component id mismatch ('%u' != '%u')", cid, cid2);
1469 if (!data->
resize(1024)) {
1470 unittest::fail(
"ComponentData test: Could not resize component");
1476 if (avail2 - avail != 1024) {
1485 unittest::fail(
"ComponentData test: Component set private data failed");
1492 unittest::fail(
"ComponentData test: Component set private data failed");
1499 unittest::fail(
"ComponentData test: Component get private data size failed");
1505 char* test =
new char[1024];
1507 unittest::fail(
"ComponentData test: Component get private data failed");
1513 if (strcmp(
"Test", test) != 0) {
1514 unittest::fail(
"ComponentData test: Component get private data comparison failed");
1521 unittest::fail(
"ComponentData test: Component set private data 2 failed");
1528 unittest::fail(
"ComponentData test: Component get private data size 2 failed");
1535 unittest::fail(
"ComponentData test: Component get private data 2 failed");
1541 if (strcmp(
"Test2", test) != 0) {
1542 unittest::fail(
"ComponentData test: Component get private data comparison 2 failed");
1549 unittest::fail(
"ComponentData test: Component delete private data failed");
1559 unittest::fail(
"ComponentData test: Component create string param failed");
1566 unittest::fail(
"ComponentData test: Component create duplicate name failed to fail");
1573 unittest::fail(
"ComponentData test: Component create integer param failed");
1580 unittest::fail(
"ComponentData test: Component create float param failed");
1588 unittest::fail(
"ComponentData test: Component get string param size failed");
1595 unittest::fail(
"ComponentData test: Component get string param failed");
1601 if (strcmp(
"Test", test) != 0) {
1602 unittest::fail(
"ComponentData test: Component get string parameter comparison 2 failed");
1610 unittest::fail(
"ComponentData test: Component get integer param failed");
1618 unittest::fail(
"ComponentData test: Component get float param failed");
1625 unittest::fail(
"ComponentData test: Component get non-existing param failed to fail");
1634 unittest::fail(
"ComponentData test: Component create integer param 2 failed");
1641 unittest::fail(
"ComponentData test: Component tweak integer param failed");
1648 unittest::fail(
"ComponentData test: Component get integer param 2 failed");
1655 unittest::fail(
"ComponentData test: Component tweak integer param result failed");
1662 unittest::fail(
"ComponentData test: Component tweak integer param 2 failed");
1669 unittest::fail(
"ComponentData test: Component get integer param 3 failed");
1676 unittest::fail(
"ComponentData test: Component tweak integer param result 2 failed");
1683 unittest::fail(
"ComponentData test: Component tweak integer param 2 failed to fail");
1691 int64 i64[] = {1,2,3,4,5};
1693 unittest::fail(
"ComponentData test: Component create integer coll param failed");
1700 unittest::fail(
"ComponentData test: Component get integer param coll failed");
1707 unittest::fail(
"ComponentData test: Component tweak integer coll param result failed");
1714 unittest::fail(
"ComponentData test: Component tweak integer coll param failed");
1721 unittest::fail(
"ComponentData test: Component get integer param coll 2 failed");
1728 unittest::fail(
"ComponentData test: Component tweak integer coll param result 2 failed");
1735 unittest::fail(
"ComponentData test: Component tweak integer coll param failed to fail");
1742 strcpy(test,
"Test1");
1743 strcpy(test+6,
"Test2");
1744 strcpy(test+12,
"Test3");
1745 strcpy(test+18,
"Test4");
1746 strcpy(test+24,
"Test5");
1750 unittest::fail(
"ComponentData test: Component create string coll param failed");
1757 unittest::fail(
"ComponentData test: Component get string param coll failed");
1763 if (strcmp(test,
"Test3") != 0) {
1764 unittest::fail(
"ComponentData test: Component tweak string coll param result failed");
1771 unittest::fail(
"ComponentData test: Component tweak string coll param failed");
1778 unittest::fail(
"ComponentData test: Component get string param coll 2 failed");
1784 if (strcmp(test,
"Test5") != 0) {
1785 unittest::fail(
"ComponentData test: Component tweak string coll param result 2 failed");
1792 unittest::fail(
"ComponentData test: Component tweak string coll param failed to fail");
1800 unittest::fail(
"ComponentData test: Component delete float param failed");
1807 unittest::fail(
"ComponentData test: Could not destroy component");
1824 unittest::fail(
"ComponentData test: Could not create new type 2");
1847 if (strcmp(test,
"Type2")) {
1943 "Component maps: private data, parameters, collections, type levels",
"memory");
Legacy per-component data record stored in the page-based allocator (predecessor of ComponentMemory).
#define PARAM_STRING_COLL
#define PARAM_INTEGER_COLL
#define ID_COMPMAPPAGE
Component map.
CMSDK time: µs-resolution 64-bit timestamps and the Time Mapping Constant (TMC).
Small, dependency-free unit test harness used by all CMSDK object tests.
static bool AddComponentStats(uint32 cid, uint64 userCPU, uint64 kernelCPU, DataMessage *inputMsg, DataMessage *outputMsg, uint32 runCount)
static bool SetComponentStats(uint32 cid, ComponentStats &stats)
static uint16 GetComponentNodeID(uint32 cid)
static ComponentData * CreateComponent(uint32 id, const char *name, uint32 size, uint16 nodeID, uint16 procID)
static bool IsComponentLocal(uint32 cid)
bool hasParameter(const char *name)
static bool UpdateRemoteComponent(uint32 cid, uint16 nodeID, uint16 procID, const char *name)
ComponentData(char *data)
Wrap an existing raw component record.
bool tweakParameter(const char *name, int32 tweak)
static uint16 GetComponentProcessID(uint32 cid)
static bool GetComponentID(const char *name, uint32 &cid)
static bool ReserveComponentID(uint32 id, const char *name)
bool createParameter(const char *name, const char *val, const char *defaultValue=NULL)
static bool GetComponentName(uint32 cid, char *name, uint32 maxNameLen)
bool getPrivateDataCopy(const char *name, char *data, uint32 maxSize)
uint32 getParameterValueSize(const char *name)
static bool RecordRemoteComponent(uint32 id, const char *name, uint16 nodeID, uint64 time)
bool setPrivateData(const char *name, const char *data, uint32 size)
static bool AddExistingComponent(uint32 cid, uint16 nodeID, uint16 procID, char *oldData, uint32 dataSize)
static ComponentStats GetComponentStats(uint32 cid)
bool deleteParameter(const char *name)
bool replacePrivateData(const char *name, const char *data, uint32 size)
uint32 getAvailableDataSize()
bool deletePrivateData(const char *name)
static char * GetAndRemoveComponent(uint32 cid, uint32 &dataSize)
static bool DestroyComponent(uint32 cid)
bool resetParameter(const char *name)
bool getParameter(const char *name, char *val, uint32 maxSize)
static bool UnitTest()
Self-test.
bool resize(uint32 increase)
uint8 getParameterDataType(const char *name)
static ComponentData * GetComponentData(uint32 cid)
bool setParameter(const char *name, const char *val)
uint32 getPrivateDataSize(const char *name)
The central Psyclone data container: a self-contained binary message with typed, named user entries.
DataMessageHeader * data
Pointer to the message's flat memory block (header + user entries).
uint32 getSize()
getSize() Get message size Many types of data of any size can be put into a message as user entries; ...
Top-level facade of the shared-memory subsystem for one process.
bool create(uint16 sysID, uint32 slotCount=100000, uint16 binCount=2, uint32 minBlockSize=1024, uint32 maxBlockSize=64 *1024, uint64 initSize=50000000L, uint64 maxSize=1000000000L, bool force=false)
Create all shared segments for a new node instance (master process only).
static bool CreateNewTypeLevel(uint16 id, const char *name, uint64 time=0)
static bool GetTypeLevelID(const char *name, uint16 &id)
static bool GetTypeLevelName(uint16 id, char *name, uint32 maxSize)
static UnitTestRunner & instance()
Access the singleton (created on first use).
void registerTest(const char *name, UnitTestFunc func, const char *description="", const char *category="", bool inDefaultRun=true)
Register a test with the runner.
uint64 GetTimeNow()
Return the current absolute time (µs since year 0) according to the TMC.
bool GetFirstFreeBitLoc(const char *bitfield, uint32 bytesize, uint32 &loc)
Find the first 0 (free) bit.
int64 Ascii2Int64(const char *ascii, uint32 start=0, uint32 end=0)
Parse a signed 64-bit decimal integer from a substring.
bool SetBit(uint32 loc, bit value, char *bitfield, uint32 bytesize)
Set bit loc to value.
uint32 strcpyavail(char *dst, const char *src, uint32 maxlen, bool copyAvailable)
Bounded strcpy that always NUL-terminates.
float64 Ascii2Float64(const char *ascii, uint32 start=0, uint32 end=0)
Parse a 64-bit float from a substring (decimal point, not locale dependent).
void fail(const char *fmt,...)
Set an explanatory reason shown on the FAIL line.
void progress(int percent, const char *action)
Report progress with a short description of the current action.
void Register_ComponentData_Tests()
Fixed header of a legacy component data record; followed by parameter and private-data areas.
One component's location record in the legacy component map.
char name[MAXKEYNAMELEN+1]
Legacy per-component throughput counters (DataMessageHeader-based rings).
uint64 time
Timestamp of the last update (µs).
Legacy value block of a collection parameter; followed by the packed values.
Legacy value block of a float parameter.
Legacy size/type prefix of one parameter entry.
Legacy value block of an integer parameter.