34 lines
1.0 KiB
C++
34 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <shared_mutex>
|
|
#include <fstream>
|
|
#include "../../../core/world/forward.h"
|
|
#include "../../../core/utils/zctx.hpp"
|
|
#include "../../../core/data/math.hpp"
|
|
|
|
namespace world::server {
|
|
///Group of chunks saved as a single file only pointer
|
|
class FileRegion {
|
|
public:
|
|
FileRegion(const std::string& folderPath, const area_<region_pos> &pos);
|
|
~FileRegion();
|
|
|
|
typedef std::vector<char> data;
|
|
|
|
bool read(const region_chunk_pos &pos, const zstd::read_ctx& ctx, data &out);
|
|
void write(const region_chunk_pos &pos, const zstd::write_ctx& ctx, const std::string_view &in);
|
|
|
|
private:
|
|
void save(std::optional<std::pair<region_chunk_pos, std::unique_ptr<FileRegion::data>>> added);
|
|
|
|
std::string path;
|
|
//TODO: use tickets to remove unused regions
|
|
|
|
std::shared_mutex mutex;
|
|
std::ifstream file;
|
|
robin_hood::unordered_map<region_chunk_pos, std::pair<uint16_t, std::streampos>> index;
|
|
|
|
void load();
|
|
};
|
|
} |