Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. static int isSpaceAvailable(const void *key, AttrType attrType, void *data, int length, int type) {
  2. 98 int freeSpace = getFreeSpace(data);
  3. 99 int offset = 0, last = -1, lCompare = 0;
  4. 100 if (freeSpace - length > 0) {
  5. 101 if (type == IX_LEAF_FLAG) {
  6. 102 last = IX_DEF_FS_LEAF - freeSpace;
  7. 103 while (offset < last) {
  8. 104 switch(attrType) {
  9. 105 case TypeInt:
  10. 106 if (memcmp(key, (char*)data + offset, sizeof(int)) < 0) {
  11. 107 return offset;
  12. 108 }
  13. 109 /* Logic for sorting duplicate elements */
  14. 110 /*else if(memcmp(key, (char*)data + offset, sizeof(int)) == 0) {
  15. 111 while(memcmp(key, (char*)data + offset, sizeof(int)) ==0) {
  16. 112 if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(int), sizeof(RID)) < 0){
  17. 113 return offset;
  18. 114 }
  19. 115 offset += sizeof(int) + sizeof(RID);
  20. 116 }
  21. return
  22. 117 }*/
  23. 118 offset += sizeof(int) + sizeof(RID);
  24. 119 case TypeReal:
  25. 120 if (memcmp(key, (char*)data + offset, sizeof(float)) < 0) {
  26. 121 return offset;
  27. 122 }
  28. 123 /* Logic for sorting duplicate elements */
  29. 124 /*else if(memcmp(key, (char*)data + offset, sizeof(float)) == 0) {
  30. 125 while(memcmp(key, (char*)data + offset, sizeof(float)) ==0) {
  31. 126 if(memcmp((char*)key + sizeof(float), (char*)data + offset + sizeof(float), sizeof(RID)) < 0){
  32. 127 return offset;
  33. 128 }
  34. 129 offset += sizeof(float) + sizeof(RID);
  35. 130 }
  36. 131 }*/
  37. 132 offset += sizeof(float) + sizeof(RID);
  38. 133 break;
  39. 134 case TypeVarChar:
  40. 135 memcpy(&lCompare, (char*)data + offset, sizeof(short));
  41. 136 if (memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) < 0) {
  42. 137 return offset;
  43. 138 }
  44. 139 /* Logic for sorting duplicate elements */
  45. 140 /*else if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) == 0) {
  46. 141 while(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) ==0) {
  47. 142 if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) < 0){
  48. 143 return offset;
  49. 144 }
  50. 145 memcpy(&lCompare, (char*)data + offset, sizeof(short));
  51. 146 offset += sizeof(short) + lCompare + sizeof(RID);
  52. 147 }
  53. 148 }*/
  54. 149 offset += sizeof(short) + lCompare + sizeof(RID);
  55. 150 break;
  56. 151 default:
  57. 152 break;
  58. 153 }
  59. 154 }
  60. 155 /* If slot not found return last offset */
  61. 156 return last;
  62. 157 } else if (type == IX_NON_LEAF_FLAG) {
  63. 158 // Debug
  64. 159 offset = IX_NON_LEAF_PAGE_PTR;
  65. 160 last = IX_DEF_FS_NON_LEAF - freeSpace;
  66. 161 while(offset < last) {
  67. 162 switch(attrType) {
  68. 163 case TypeInt:
  69. 164 if(memcmp(key, (char*)data + offset, sizeof(int)) < 0) {
  70. 165 return offset;
  71. 166 }
  72. 167 offset += sizeof(int) + IX_NON_LEAF_PAGE_PTR;
  73. 168 break;
  74. 169 case TypeReal:
  75. 170 if(memcmp(key, (char*)data + offset, sizeof(float)) < 0) {
  76. 171 return offset;
  77. 172 }
  78. 173 offset += sizeof(float) + IX_NON_LEAF_PAGE_PTR;
  79. 174 break;
  80. 175 case TypeVarChar:
  81. 176 memcpy(&lCompare, (char*)data + offset, sizeof(short));
  82. 177 if(memcmp(key, (char*)data + offset + sizeof(short), lCompare) < 0){
  83. 178 return offset;
  84. 179 }
  85. 180 offset +=sizeof(short) + lCompare + IX_NON_LEAF_PAGE_PTR;
  86. 181 break;
  87. 182 default:
  88. 183 break;
  89. 184 }
  90. 185 }
  91. 186 return last;
  92. 187 } else {
  93. 188 return -1;
  94. 189 }
  95. 190 }
  96. 191 return -1;
  97. 192 }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement