//
|
|
// Created by 马也驰 on 2025/1/3.
|
|
//
|
|
|
|
#ifndef LEVELDB_GC_EXECUTOR_H
|
|
#define LEVELDB_GC_EXECUTOR_H
|
|
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <string>
|
|
|
|
class VlogGC;
|
|
|
|
class gc_executor {
|
|
public:
|
|
explicit gc_executor() {}
|
|
|
|
~gc_executor() = default;
|
|
|
|
public:
|
|
static void exec_gc(VlogGC *vlog_gc_, size_t old_vlog_num, size_t new_vlog_num);
|
|
|
|
private:
|
|
static inline bool value_deleted(uint16_t value_len) {
|
|
return !(value_len >> 15);
|
|
}
|
|
static inline uint16_t get_value_len(char *value) {
|
|
uint16_t value_len;
|
|
memcpy(&value_len, value, sizeof(uint16_t));
|
|
return value_len;
|
|
}
|
|
static inline size_t get_value_slotnum(char *value) {
|
|
size_t slot_num;
|
|
memcpy(&slot_num, &value[sizeof(uint16_t)], sizeof(size_t));
|
|
return slot_num;
|
|
}
|
|
|
|
};
|
|
|
|
#endif // LEVELDB_GC_EXECUTOR_H
|