#include "util/coding.h"
#include "db/vlog_converter.h"
namespace leveldb{
namespace vlog{
    // 当需要将键值对插入数据库时，将值的存储位置 (file_no 和 file_offset) 编码为 Vlog Pointer，并与键关联存储。
    // 紧凑的编码格式便于减少存储开销。
    Slice VlogConverter::GetVptr(uint64_t file_no, uint64_t file_offset, char* buf){
        char* vfileno_end = EncodeVarint64(buf, file_no);
        char* vfileoff_end = EncodeVarint64(vfileno_end, file_offset);
        return Slice(buf, vfileoff_end - buf);
    }
    Status VlogConverter::DecodeVptr(uint64_t* file_no, uint64_t* file_offset, Slice* vptr){
        bool decoded_status = true;
        decoded_status &= GetVarint64(vptr, file_no);
        decoded_status &= GetVarint64(vptr, file_offset);
        if(!decoded_status) return Status::Corruption("Can not Decode vptr from Read Bytes.");
        else return Status::OK();
    }
}// namespace vlog
}