1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-07 19:40:24 +08:00

finish int16 index

This commit is contained in:
源文雨
2022-05-03 13:38:50 +08:00
parent 34700361c2
commit 05f6c7a3c4
2 changed files with 32 additions and 15 deletions

View File

@@ -70,7 +70,7 @@ uint64_t count_int16_items(int fd, void* index) {
// 计算总的条目数
for(int i = 0; i < 128; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
total += 256;
continue;
}
@@ -78,7 +78,7 @@ uint64_t count_int16_items(int fd, void* index) {
}
for(int i = 128; i < 256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32]) {
total += 256;
continue;
}
@@ -133,7 +133,7 @@ int insert_int16_item(int fd, void* index, key_t k, uint64_t ptr) {
#endif
for(int i = 0; i < key/256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -155,7 +155,7 @@ int insert_int16_item(int fd, void* index, key_t k, uint64_t ptr) {
#endif
for(int i = 0; i < 128; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -195,12 +195,11 @@ int insert_int16_item(int fd, void* index, key_t k, uint64_t ptr) {
for(int i = 0; i < sum/256; i++) {
if(lseek(fd, ptr, SEEK_SET) < 0) return EOF;
readle64(fd, ptr);
if(unlikely(!ptr)) {
errno = ESPIPE;
return EOF;
}
}
lseek(fd, 8*(sum%256+1), SEEK_CUR);
#ifdef DEBUG
printf("seek: %016llx, ", ptr);
#endif
if(lseek(fd, ptr+8*(sum%256+1), SEEK_SET) < 0) return EOF;
#ifdef DEBUG
puts("replace");
#endif
@@ -315,7 +314,7 @@ uint64_t find_item_by_int16_key(int fd, void* index, key_t k) {
#endif
for(int i = 0; i < key/256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -338,7 +337,7 @@ uint64_t find_item_by_int16_key(int fd, void* index, key_t k) {
#endif
for(int i = 0; i < 128; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -346,7 +345,7 @@ uint64_t find_item_by_int16_key(int fd, void* index, key_t k) {
}
for(int i = 128; i < key/256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32]) {
sum += 256;
continue;
}
@@ -418,7 +417,7 @@ uint64_t remove_item_by_int16_key(int fd, void* index, key_t k) {
#endif
for(int i = 0; i < key/256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -441,7 +440,7 @@ uint64_t remove_item_by_int16_key(int fd, void* index, key_t k) {
#endif
for(int i = 0; i < 128; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8))[i*32]) {
sum += 256;
continue;
}
@@ -449,7 +448,7 @@ uint64_t remove_item_by_int16_key(int fd, void* index, key_t k) {
}
for(int i = 128; i < key/256; i++) {
int s = ((uint8_t*)(index+24))[i];
if(unlikely(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32])) {
if(!s && ((uint8_t*)(index+INT16_INDEX_SZ+8+8))[i*32]) {
sum += 256;
continue;
}

View File

@@ -149,6 +149,24 @@ int main() {
}
}
for(int i = 57000; i < 65536+259; i++) {
if(insert_item(fd, TYPE_INT16, index, (key_t)i, i*1234)) {
printf("%u ", (uint16_t)i);
fflush(stdout);
perror("insert_int16_item");
return 10;
}
}
for(int i = 57000; i < 65536+259; i++) {
if((int)find_item_by_key(fd, TYPE_INT16, index, (key_t)i) != i*1234) {
printf("%u ", (uint16_t)i);
fflush(stdout);
perror("find_item_by_key");
return 11;
}
}
close(fd);
/* end test int16 */
// remove("types_test_tmp.bin");