//
// 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