#ifndef VTABLE_BUILDER_H
#define VTABLE_BUILDER_H

#include "leveldb/options.h"
#include "leveldb/slice.h"
#include "table/vtable_format.h"
#include "util/coding.h"

namespace leveldb {

class VTableBuilder {
  public:
    VTableBuilder(const Options& options, WritableFile* file);

    // Add a record to the vTable
    void Add(const VTableRecord& record, VTableHandle* handle);

    // Builder status, return non-ok iff some error occurs
    Status status() const { return status_; }

    // Finish building the vTable
    Status Finish();

    // Abandon building the vTable
    void Abandon();

    uint64_t FileSize() const { return file_size_; }

    uint64_t RecordNumber() const { return record_number_; }
  private:
    bool ok() const { return status().ok(); }

    WritableFile* file_;
    uint64_t file_size_{0};
    uint64_t record_number_{0};

    Status status_;

    RecordEncoder encoder_;
};

} // namespace leveldb

#endif //VTABLE_BUILDER_H