SASStringBTreeEnum_t SASStringBTreeEnumCreate (SASStringBTree_t tree) { __SBEnumeration *stringenum = NULL; stringenum = (__SBEnumeration *) malloc (sizeof (__SBEnumeration)); if (stringenum != NULL) { stringenum->curmod = SASStringBTreeGetModCount (tree); stringenum->curcount = SASStringBTreeGetCurCount (tree); if (stringenum->curmod != 0L) { stringenum->hasmore = !SASStringBTreeIsEmpty (tree); stringenum->tree = tree; stringenum->ref.node = NULL; stringenum->ref.pos = 0; stringenum->entryString[0] = '\0'; stringenum->curkey = &stringenum->entryString[0]; } else { free (stringenum); stringenum = NULL; } } else { } return (SASStringBTreeEnum_t) stringenum; }
static int sassim_btree_test1 () { SASStringBTree_t stringBTree; SASStringBTreeEnum_t senum; unsigned long blockSize = block__Size64K; char *temp1, *temp2, *temp3, *temp4, *temp5, *temp6; char str[64]; char str2[4] = " "; char *strptr; char chr; int rc1; long modcnt; stringBTree = SASStringBTreeCreate (blockSize); if (!stringBTree) { SASSIM_PRINT_ERR ("SASStringBTreeCreate(%u)", blockSize); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeCreate (%lu) success", blockSize); SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); SASSIM_DUMP_BLOCK (stringBTree, 128); SASSIM_PRINT_MSG ("SASStringBTreeIsEmpty(stringBTree) = %d", SASStringBTreeIsEmpty (stringBTree)); rc1 = SASStringBTreePut (stringBTree, (char *) "s", (void *) "s"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, "s", "s"); return 1; } rc1 = SASStringBTreePut (stringBTree, (char *) "j", (void *) "j"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, "j", "j"); return 1; } rc1 = SASStringBTreePut (stringBTree, (char *) "m", (void *) "m"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, "m", "m"); return 1; } rc1 = SASStringBTreePut (stringBTree, (char *) "~", (void *) "~"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, "~", "~"); return 1; } rc1 = SASStringBTreePut (stringBTree, (char *) "!", (void *) "!"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, "!", "!"); return 1; } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); SASSIM_PRINT_MSG ("SASStringBTreeIsEmpty(stringBTree) = %d", SASStringBTreeIsEmpty (stringBTree)); temp1 = SASStringBTreeGetMinKey (stringBTree); if (!temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey(%p)", stringBTree); return 1; } else { SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=%s", temp1); if (strcmp(temp1, "!") != 0) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey(%p) expected <%s> was %s@%p", stringBTree, "!", temp1, temp1); } } temp2 = SASStringBTreeGetMaxKey (stringBTree); if (!temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=%s", temp2); rc1 = SASStringBTreeContainsKey (stringBTree, (char *) "s"); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreeContainsKey(%p, %s): %d", stringBTree, "s", rc1); return 1; } rc1 = SASStringBTreeContainsKey (stringBTree, (char *) "S"); if (rc1) { SASSIM_PRINT_ERR ("SASStringBTreeContainsKey(%p, %s): %d", stringBTree, "S", rc1); return 1; } temp3 = (char *) SASStringBTreeGet (stringBTree, (char *) "s"); if (!temp3) { SASSIM_PRINT_ERR ("SASStringBTreeGet(%p, %s): %p", stringBTree, "s", temp3); return 1; } temp4 = (char *) SASStringBTreeGet (stringBTree, (char *) "S"); if (temp4) { SASSIM_PRINT_ERR ("SASStringBTreeGet(%p, %s): %p", stringBTree, "S", temp4); return 1; } rc1 = SASStringBTreePut (stringBTree, (char *) "m", (void *) "M"); if (rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s): %d", stringBTree, "m", "M", rc1); return 1; } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeReplace (stringBTree, (char *) "m", (void *) "M"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeReplace(%p, %s, %s)", stringBTree, "m", "M"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeReplace(m, M) = <%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeReplace (stringBTree, (char *) "n", (void *) "N"); if (temp5) { SASSIM_PRINT_ERR ("SASStringBTreeReplace(%p, %s, %s): %p", stringBTree, "n", "N", temp5); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeReplace(n,N)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeRemove (stringBTree, (char *) "s"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeRemove(%p, %s)", stringBTree, "s"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(s)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeRemove (stringBTree, (char *) "j"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeRemove(%p, %s)", stringBTree, "j"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(j)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeRemove (stringBTree, (char *) "m"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeRemove(%p, %s)", stringBTree, "m"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(m)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeRemove (stringBTree, (char *) "~"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeRemove(%p, %s)", stringBTree, "~"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(~)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp5 = (char *) SASStringBTreeRemove (stringBTree, (char *) "!"); if (!temp5) { SASSIM_PRINT_ERR ("SASStringBTreeRemove(%p, %s)", stringBTree, "!"); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(!)=<%s>", temp5); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp1 = SASStringBTreeGetMinKey (stringBTree); if (temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey(%p) returned on a empty btree", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=%s", temp1); temp2 = SASStringBTreeGetMaxKey (stringBTree); if (temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey(%p) returned on a empty btree", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=%s", temp2); memset (str, '\0', 64); strptr = &str[33]; for (chr = 'a'; chr <= 'z'; chr++) { *strptr = chr; rc1 = SASStringBTreePut (stringBTree, strptr, strptr); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, strptr, strptr); return 1; } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); strptr++; } modcnt = SASStringBTreeGetModCount (stringBTree); if (!modcnt) { SASSIM_PRINT_ERR ("SASStringBTreeGetModCount(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetModCount=%ld", modcnt); temp1 = SASStringBTreeGetMinKey (stringBTree); if (!temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=%s", temp1); temp2 = SASStringBTreeGetMaxKey (stringBTree); if (!temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=%s", temp2); senum = SASStringBTreeEnumCreate (stringBTree); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreate(%p)", stringBTree); return 1; } printf ("SASStringBTreeEnumCreate(%p)", stringBTree); printf (" SASStringBTreeEnumNext(%p) =<", senum); while (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { break; } SASSIM_PRINT_MSG ("%c", *temp); } printf (">"); SASStringBTreeEnumDestroy (senum); senum = SASStringBTreeEnumCreate (stringBTree); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreate(%p)", stringBTree); return 1; } printf ("SASStringBTreeEnumCreate(%p)", stringBTree); strptr = &str[1]; for (chr = 'A'; chr <= 'Z'; chr++) { *strptr = chr; rc1 = SASStringBTreePut (stringBTree, strptr, strptr); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut(%p, %s, %s)", stringBTree, strptr, strptr); return 1; } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); if (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext(%p)", senum); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeEnumNext(%p)=%c", senum, *temp); strptr++; } printf (" SASStringBTreeEnumNext(%p) =<", senum); while (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { break; } SASSIM_PRINT_MSG ("%c", *temp); } printf (">"); } SASStringBTreeEnumDestroy (senum); SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); modcnt = SASStringBTreeGetModCount (stringBTree); if (!modcnt) { SASSIM_PRINT_ERR ("SASStringBTreeGetModCount(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetModCount=%ld", modcnt); temp1 = SASStringBTreeGetMinKey (stringBTree); if (!temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=%s", temp1); temp2 = SASStringBTreeGetMaxKey (stringBTree); if (!temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=%s", temp2); senum = SASStringBTreeEnumCreate (stringBTree); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreate(%p)", stringBTree); return 1; } printf ("SASStringBTreeEnumCreate(%p)", stringBTree); printf (" SASStringBTreeEnumNext(%p) =<", senum); while (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { break; } SASSIM_PRINT_MSG ("%c", *temp); } printf (">"); SASStringBTreeEnumDestroy (senum); senum = SASStringBTreeEnumCreateStartAt (stringBTree, (char*)"m"); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreateStartAt(%p)", stringBTree); return 1; } printf ("SASStringBTreeEnumCreate(%p)", stringBTree); temp6 = SASStringBTreeEnumCurrent(senum); printf (" SASStringBTreeEnumNext(%p) %c =<", senum, *temp6); while (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { break; } SASSIM_PRINT_MSG ("%c", *temp); } printf (">"); SASStringBTreeEnumDestroy (senum); #if 1 for (chr = 'a'; chr <= 'z'; chr++) { str2[0] = chr; temp6 = (char *) SASStringBTreeRemove (stringBTree, str2); if (!temp6) { break; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(%s)= %c", str2, *temp6); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); } for (chr = 'A'; chr <= 'Z'; chr++) { str2[0] = chr; temp6 = (char *) SASStringBTreeRemove (stringBTree, str2); if (!temp6) { break; } SASSIM_PRINT_MSG ("SASStringBTreeRemove(%s)= %c", str2, *temp6); SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); } SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); SASSIM_DUMP_BLOCK (stringBTree, 128); #endif SASStringBTreeDestroy (stringBTree); return 0; }
//#define __SASDebugPrint__ 1 static int sassim_btree_test_split () { SASStringBTree_t stringBTree; unsigned long blockSize = block__Size64K; SASStringBTreeEnum_t senum; char *rawkey, *keyval, *strptr; char *temp1, *temp2; int i, rc1; long modcnt; char chr, str[128], keylist[128]; char str2[4] = " "; stringBTree = SASStringBTreeCreate (blockSize); if (!stringBTree) { SASSIM_PRINT_ERR ("SASStringBTreeCreate(%zu)", blockSize); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeCreate (%lu) success", blockSize); SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); #ifdef __SASDebugPrint__ SASSIM_DUMP_BLOCK (stringBTree, 128); #endif SASSIM_PRINT_MSG ("SASStringBTreeIsEmpty(stringBTree) = %d", SASStringBTreeIsEmpty (stringBTree)); memset (str, '\0', 128); strptr = &str[0]; i = 0; for (chr = '1'; chr <= 0x7d; chr++) { keylist[i] = chr; *strptr = chr; rc1 = SASStringBTreePut (stringBTree, strptr, strptr); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreePut (%p, %s, %s)", stringBTree, strptr, strptr); return 1; } #ifdef __SASDebugPrint__ SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); #endif strptr++; i++; } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp1 = SASStringBTreeGetMinKey (stringBTree); if (!temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=(%s)", temp1); temp2 = SASStringBTreeGetMaxKey (stringBTree); if (!temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=(%s)", temp2); modcnt = SASStringBTreeGetModCount (stringBTree); if (!modcnt) { SASSIM_PRINT_ERR ("SASStringBTreeGetModCount (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetModCount=%ld", modcnt); senum = SASStringBTreeEnumCreate (stringBTree); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreate (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeEnumCreate(%p)", stringBTree); i = 0; while (SASStringBTreeEnumHasMore (senum)) { char *temp = (char *) SASStringBTreeEnumNext (senum); if (!temp) { break; } if (keylist[i] != *temp) { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext: misscompare %c != %c", keylist[i] != *temp); return 1; } SASSIM_PRINT_MSG ("<%p> %c", temp, *temp); i++; } SASStringBTreeEnumDestroy (senum); SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); #ifdef __SASDebugPrint__ SASSIM_DUMP_BLOCK (stringBTree, 128); #endif for (chr = 0x31; chr <= 0x60; chr++) { str2[0] = chr; keyval = (char *) SASStringBTreeRemove (stringBTree, str2); if (!keyval) { SASSIM_PRINT_ERR ("SASStringBTreeRemove (%p, %s) = %c", stringBTree, str2, *keyval); return 1; } else { SASSIM_PRINT_MSG ("SASStringBTreeRemove (%p, %s) = %c", stringBTree, str2, *keyval); } #ifdef __SASDebugPrint__ SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); #endif } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); temp1 = SASStringBTreeGetMinKey (stringBTree); if (!temp1) { SASSIM_PRINT_ERR ("SASStringBTreeGetMinKey (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMinKey=%s", temp1); temp2 = SASStringBTreeGetMaxKey (stringBTree); if (!temp2) { SASSIM_PRINT_ERR ("SASStringBTreeGetMaxKey(%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetMaxKey=%s", temp2); modcnt = SASStringBTreeGetModCount (stringBTree); if (modcnt == 0) { SASSIM_PRINT_ERR ("SASStringBTreeGetModCount (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeGetModCount=%ld", modcnt); senum = SASStringBTreeEnumCreate (stringBTree); if (!senum) { SASSIM_PRINT_ERR ("SASStringBTreeEnumCreate (%p)", stringBTree); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeEnumCreate(%p)", stringBTree); keyval = (char *) SASStringBTreeEnumNext (senum); if (!keyval) { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext (%p)", senum); return 1; } SASSIM_PRINT_MSG ("<%p> %c", keyval, *keyval); if (*keyval != 'a') { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext(%p)=%c expected 'a'", senum, *keyval); return 1; } rawkey = keyval; while (SASStringBTreeEnumHasMore (senum)) { keyval = (char *) SASStringBTreeEnumNext (senum); if (!keyval) { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext (%p)", senum); return 1; } SASSIM_PRINT_MSG ("<%p> %c", keyval, *keyval); if (rawkey < keyval) rawkey = keyval; else { SASSIM_PRINT_ERR ("SASStringBTreeEnumNext(%p) ordering %c=%c", senum, rawkey, *keyval); return 1; } } SASStringBTreeEnumDestroy (senum); for (chr = 0x61; chr <= 0x7d; chr++) { str2[0] = chr; keyval = (char *) SASStringBTreeRemove (stringBTree, str2); if (!keyval) { SASSIM_PRINT_ERR ("SASStringBTreeRemove (%p, %s) = %c", stringBTree, str2, *keyval); return 1; } else { SASSIM_PRINT_MSG ("SASStringBTreeRemove (%p, %s) = %c", stringBTree, str2, *keyval); } #ifdef __SASDebugPrint__ SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); #endif } SASSIM_PRINT_MSG ("sasbtree_print="); sasbtree_print (stringBTree); rc1 = SASStringBTreeIsEmpty (stringBTree); if (!rc1) { SASSIM_PRINT_ERR ("SASStringBTreeIsEmpty(stringBTree) = %d", rc1); return 1; } SASSIM_PRINT_MSG ("SASStringBTreeIsEmpty(stringBTree) = %d", rc1); SASSIM_PRINT_MSG ("SASStringBTreeFreeSpace() = %zu", SASStringBTreeFreeSpace (stringBTree)); #ifdef __SASDebugPrint__ SASSIM_DUMP_BLOCK (stringBTree, 128); #endif SASStringBTreeDestroy (stringBTree); return 0; }