From 05f6c7a3c4de6de5ba03356f8a664b2b250a8c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Tue, 3 May 2022 13:38:50 +0800 Subject: [PATCH] finish int16 index --- src/types/int16.c | 29 ++++++++++++++--------------- tests/types_test.c | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/types/int16.c b/src/types/int16.c index b11a0b1..e27a03f 100644 --- a/src/types/int16.c +++ b/src/types/int16.c @@ -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; } diff --git a/tests/types_test.c b/tests/types_test.c index ff7e989..005cc6f 100644 --- a/tests/types_test.c +++ b/tests/types_test.c @@ -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");