Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int isSpaceAvailable(const void *key, AttrType attrType, void *data, int length, int type) {
- 98 int freeSpace = getFreeSpace(data);
- 99 int offset = 0, last = -1, lCompare = 0;
- 100 if (freeSpace - length > 0) {
- 101 if (type == IX_LEAF_FLAG) {
- 102 last = IX_DEF_FS_LEAF - freeSpace;
- 103 while (offset < last) {
- 104 switch(attrType) {
- 105 case TypeInt:
- 106 if (memcmp(key, (char*)data + offset, sizeof(int)) < 0) {
- 107 return offset;
- 108 }
- 109 /* Logic for sorting duplicate elements */
- 110 /*else if(memcmp(key, (char*)data + offset, sizeof(int)) == 0) {
- 111 while(memcmp(key, (char*)data + offset, sizeof(int)) ==0) {
- 112 if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(int), sizeof(RID)) < 0){
- 113 return offset;
- 114 }
- 115 offset += sizeof(int) + sizeof(RID);
- 116 }
- return
- 117 }*/
- 118 offset += sizeof(int) + sizeof(RID);
- 119 case TypeReal:
- 120 if (memcmp(key, (char*)data + offset, sizeof(float)) < 0) {
- 121 return offset;
- 122 }
- 123 /* Logic for sorting duplicate elements */
- 124 /*else if(memcmp(key, (char*)data + offset, sizeof(float)) == 0) {
- 125 while(memcmp(key, (char*)data + offset, sizeof(float)) ==0) {
- 126 if(memcmp((char*)key + sizeof(float), (char*)data + offset + sizeof(float), sizeof(RID)) < 0){
- 127 return offset;
- 128 }
- 129 offset += sizeof(float) + sizeof(RID);
- 130 }
- 131 }*/
- 132 offset += sizeof(float) + sizeof(RID);
- 133 break;
- 134 case TypeVarChar:
- 135 memcpy(&lCompare, (char*)data + offset, sizeof(short));
- 136 if (memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) < 0) {
- 137 return offset;
- 138 }
- 139 /* Logic for sorting duplicate elements */
- 140 /*else if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) == 0) {
- 141 while(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) ==0) {
- 142 if(memcmp((char*)key + sizeof(int), (char*)data + offset + sizeof(short), lCompare) < 0){
- 143 return offset;
- 144 }
- 145 memcpy(&lCompare, (char*)data + offset, sizeof(short));
- 146 offset += sizeof(short) + lCompare + sizeof(RID);
- 147 }
- 148 }*/
- 149 offset += sizeof(short) + lCompare + sizeof(RID);
- 150 break;
- 151 default:
- 152 break;
- 153 }
- 154 }
- 155 /* If slot not found return last offset */
- 156 return last;
- 157 } else if (type == IX_NON_LEAF_FLAG) {
- 158 // Debug
- 159 offset = IX_NON_LEAF_PAGE_PTR;
- 160 last = IX_DEF_FS_NON_LEAF - freeSpace;
- 161 while(offset < last) {
- 162 switch(attrType) {
- 163 case TypeInt:
- 164 if(memcmp(key, (char*)data + offset, sizeof(int)) < 0) {
- 165 return offset;
- 166 }
- 167 offset += sizeof(int) + IX_NON_LEAF_PAGE_PTR;
- 168 break;
- 169 case TypeReal:
- 170 if(memcmp(key, (char*)data + offset, sizeof(float)) < 0) {
- 171 return offset;
- 172 }
- 173 offset += sizeof(float) + IX_NON_LEAF_PAGE_PTR;
- 174 break;
- 175 case TypeVarChar:
- 176 memcpy(&lCompare, (char*)data + offset, sizeof(short));
- 177 if(memcmp(key, (char*)data + offset + sizeof(short), lCompare) < 0){
- 178 return offset;
- 179 }
- 180 offset +=sizeof(short) + lCompare + IX_NON_LEAF_PAGE_PTR;
- 181 break;
- 182 default:
- 183 break;
- 184 }
- 185 }
- 186 return last;
- 187 } else {
- 188 return -1;
- 189 }
- 190 }
- 191 return -1;
- 192 }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement