Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. static int traverseToLeafNode(const void *key, AttrType attrType, void *data, IXFileHandle &ixFileHandle) {
  2. int freeSpace = 0;
  3. int offset = 0, lCompare = 0, nextPagePtr = 0;
  4. void *temp = (char*)malloc(PAGE_SIZE);
  5. int ret = -1;
  6. memcpy(temp, data, PAGE_SIZE);
  7. while(getNodeFlag(temp) == IX_NON_LEAF_FLAG){
  8. freeSpace = getFreeSpace(temp);
  9. offset = IX_NON_LEAF_PTR_SIZE;
  10. int found = 0;
  11. while(offset < IX_DEF_FS_NON_LEAF - freeSpace){
  12. switch(attrType) {
  13. case TypeInt:
  14. if(memcmp(key, (char*)data + offset, sizeof(int)) < 0) {
  15. memcpy(&nextPagePtr, (char*)temp + offset - IX_NON_LEAF_PTR_SIZE, IX_NON_LEAF_PTR_SIZE);
  16. found = 1;
  17. break;
  18. }
  19. offset += sizeof(int) + IX_NON_LEAF_PTR_SIZE;
  20. break;
  21. case TypeReal:
  22. if(memcmp(key, (char*)data + offset, sizeof(float)) < 0) {
  23. memcpy(&nextPagePtr, (char*)temp + offset - IX_NON_LEAF_PTR_SIZE, IX_NON_LEAF_PTR_SIZE);
  24. found = 1;
  25. break;
  26. }
  27. offset += sizeof(float) + IX_NON_LEAF_PTR_SIZE;
  28. break;
  29. case TypeVarChar:
  30. memcpy(&lCompare, (char*)temp + offset, sizeof(short));
  31. if(compareVarCharKeyData(key, temp, offset) < 0){
  32. memcpy(&nextPagePtr, (char*)temp + offset - IX_NON_LEAF_PTR_SIZE, IX_NON_LEAF_PTR_SIZE);
  33. found = 1;
  34. break;
  35. }
  36. offset += sizeof(short) + lCompare + IX_NON_LEAF_PTR_SIZE;
  37. break;
  38. default:
  39. break;
  40. }
  41. }
  42. if(found == 0){
  43. memcpy(&nextPagePtr, (char*)temp + offset - IX_NON_LEAF_PTR_SIZE, IX_NON_LEAF_PTR_SIZE);
  44. }
  45. ret = ixFileHandle.ixReadPage(nextPagePtr, temp);
  46. if(ret == -1) { return -1; }
  47. }
  48. free(temp);
  49. return nextPagePtr;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement