Minecraft Community Edition 0.1.0
Loading...
Searching...
No Matches
VirtualFileSystem.hpp
1#pragma once
2#include <EASTL/string.h>
3#include <EASTL/unordered_map.h>
4#include <EASTL/vector.h>
5#define JSON_NOEXCEPTION
6#include "nlohmann/json.hpp"
7#include "Stream/FileInputStream.hpp"
8
9namespace mce::io {
19 public:
24 enum FileBinaryType : unsigned char {
25 NONE = 0,
29 };
30
37 union Version {
38
45 static Version makeVersion(unsigned char major, unsigned char minor, unsigned char patch);
46
47 struct {
48 unsigned char major, minor, patch;
49 };
50
51 unsigned int quad;
52 };
53
62
67 Config& getConfig();
68
75 bool getFile(const eastl::string_view& fileTag, eastl::vector<char>& bytes);
76
83 bool buildJSONMappingFile(const std::string& fileInName, const std::string& fileOutName);
84
90 bool loadFile(const std::string& fileName);
91 private:
92#ifdef _DEBUG
98 bool loadJSONMappingFile(const std::string& fileName);
99#else
105 bool loadVirtualFileSystem(const std::string& fileName);
106#endif
110 struct File {
111 std::string path;
112 size_t start, end;
113
114 size_t size;
115 };
116
122 eastl::unordered_map<eastl::string, File> files;
123
124 Config cfg;
125#ifdef _DEBUG
126 nlohmann::json data;
127#else
128 FileInputStream fileInStream;
134 char* binary;
135#endif
136 };
137}
Definition FileInputStream.hpp:17
VirtualFileSystem manages a collection of files referenced by tags.
Definition VirtualFileSystem.hpp:18
bool getFile(const eastl::string_view &fileTag, eastl::vector< char > &bytes)
Retrieve a file's bytes identified by its tag.
Definition VirtualFileSystem.cpp:109
bool loadFile(const std::string &fileName)
Load the virtual file system from a file.
Definition VirtualFileSystem.cpp:301
FileBinaryType
Types of virtual file collections that can be stored in a VFS file.
Definition VirtualFileSystem.hpp:24
@ ASSETS_FILE
Definition VirtualFileSystem.hpp:26
@ WORLD_FILE
Definition VirtualFileSystem.hpp:28
@ NONE
Definition VirtualFileSystem.hpp:25
@ SOURCE_FILE
Definition VirtualFileSystem.hpp:27
Config & getConfig()
Access the runtime configuration.
Definition VirtualFileSystem.cpp:90
bool buildJSONMappingFile(const std::string &fileInName, const std::string &fileOutName)
Build a binary VFS file from a JSON mapping.
Definition VirtualFileSystem.cpp:185
Definition FileInputStream.hpp:17
Configuration for how the VirtualFileSystem should operate.
Definition VirtualFileSystem.hpp:57
Version version
Definition VirtualFileSystem.hpp:60
bool useStreamInput
Definition VirtualFileSystem.hpp:58
FileBinaryType fileType
Definition VirtualFileSystem.hpp:59
Version information for the virtual file system format.
Definition VirtualFileSystem.hpp:37
unsigned char patch
Definition VirtualFileSystem.hpp:48
unsigned int quad
Definition VirtualFileSystem.hpp:51
static Version makeVersion(unsigned char major, unsigned char minor, unsigned char patch)
Create a Version from components.
Definition VirtualFileSystem.cpp:38