1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-07 19:40:24 +08:00
This commit is contained in:
源文雨
2022-05-03 01:29:08 +08:00
parent e24f761f34
commit bd6ce1d778
11 changed files with 636 additions and 35 deletions

View File

@@ -100,4 +100,7 @@
#endif
#endif
# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)
#endif

View File

@@ -29,6 +29,13 @@ void* create_index(int fd, type_t t, void* buf);
// 返回:索引头节点的指针 index
void* load_index(int fd, type_t t, uint64_t ptr, void* buf);
// 移除 index 并释放空间
int remove_index(int fd, type_t t, void* index);
// 统计索引条数
// 返回:索引条数
uint64_t count_items(int fd, type_t t, void* index);
// 插入一条索引
int insert_item(int fd, type_t t, void* index, key_t k, uint64_t ptr);
@@ -37,6 +44,7 @@ int insert_item(int fd, type_t t, void* index, key_t k, uint64_t ptr);
uint64_t find_item_by_key(int fd, type_t t, void* index, key_t k);
// 使用索引删除项
int remove_item_by_key(int fd, type_t t, void* index, key_t k);
// 返回ptr
uint64_t remove_item_by_key(int fd, type_t t, void* index, key_t k);
#endif

35
include/types/int16.h Normal file
View File

@@ -0,0 +1,35 @@
#ifndef _TYPE_INT16_H_
#define _TYPE_INT16_H_
#include <stdint.h>
#include "../types.h"
#define INT16_INDEX_SZ ( 8*3 + 256*8 )
#define INT16_BITMAP_SZ ( 65536/8 )
#define INT16_CHAIN_SZ ( (256+1)*8 )
// len(buf) >= INT16_INDEX_SZ+10 + INT16_BITMAP_SZ+8*2 = 10290
// &buf[0] ~ &buf[2081] is index, index = buf+10
// &buf[2082] ~ &buf[6185] is the first page of bitmap, ptr = buf+2090
// &buf[6186] ~ &buf[10289] is the second page of bitmap, ptr = buf+6194
// 返回index = buf+10
void* create_int16_index(int fd, void* buf);
// len(buf) >= INT16_INDEX_SZ+10 + INT16_BITMAP_SZ+8*2 = 10290
// &buf[0] ~ &buf[2081] is index, index = buf+10
// &buf[2082] ~ &buf[6185] is the first page of bitmap, ptr = buf+2090
// &buf[6186] ~ &buf[10289] is the second page of bitmap, ptr = buf+6194
// 返回index = buf+10
void* load_int16_index(int fd, uint64_t ptr, void* buf);
int remove_int16_index(int fd, void* index);
uint64_t count_int16_items(int fd, void* index);
int insert_int16_item(int fd, void* index, key_t k, uint64_t ptr);
uint64_t find_item_by_int16_key(int fd, void* index, key_t k);
uint64_t remove_item_by_int16_key(int fd, void* index, key_t k);
#endif

View File

@@ -12,10 +12,14 @@ void* create_int8_index(int fd, void* buf);
// len(buf) >= INT8_INDEX_SZ+10
void* load_int8_index(int fd, uint64_t ptr, void* buf);
int remove_int8_index(int fd, void* index);
uint64_t count_int8_items(int fd, void* index);
int insert_int8_item(int fd, void* index, key_t k, uint64_t ptr);
uint64_t find_item_by_int8_key(int fd, void* index, key_t k);
int remove_item_by_int8_key(int fd, void* index, key_t k);
uint64_t remove_item_by_int8_key(int fd, void* index, key_t k);
#endif