5 #ifndef TILESON_TILESON_PARSER_HPP
6 #define TILESON_TILESON_PARSER_HPP
9 #if _MSC_VER && !__INTEL_COMPILER
11 namespace fs = std::filesystem;
13 #if __MINGW64_VERSION_MAJOR > 6
15 namespace fs = std::filesystem;
17 #include <experimental/filesystem>
18 namespace fs = std::experimental::filesystem;
21 #if __clang_major__ < 8
22 #include <experimental/filesystem>
23 namespace fs = std::experimental::filesystem;
26 namespace fs = std::filesystem;
30 #include <experimental/filesystem>
31 namespace fs = std::experimental::filesystem;
34 namespace fs = std::filesystem;
56 #ifdef JSON11_IS_DEFINED
57 inline explicit Tileson(std::unique_ptr<tson::IJson> jsonParser = std::make_unique<tson::Json11>(),
bool includeBase64Decoder =
true);
59 inline explicit Tileson(std::unique_ptr<tson::IJson> jsonParser,
bool includeBase64Decoder =
true);
62 inline std::unique_ptr<tson::Map>
parse(
const fs::path &path, std::unique_ptr<
IDecompressor<std::vector<uint8_t>, std::vector<uint8_t>>> decompressor =
nullptr);
63 inline std::unique_ptr<tson::Map>
parse(
const void * data,
size_t size, std::unique_ptr<
IDecompressor<std::vector<uint8_t>, std::vector<uint8_t>>> decompressor =
nullptr);
67 inline std::unique_ptr<tson::Map> parseJson();
68 std::unique_ptr<tson::IJson> m_json;
78 tson::Tileson::Tileson(std::unique_ptr<tson::IJson> jsonParser,
bool includeBase64Decoder) : m_json {std::move(jsonParser)}
80 if(includeBase64Decoder)
94 if(decompressor !=
nullptr)
96 std::vector<uint8_t> decompressed = decompressor->decompressFile(path);
97 result = (decompressed.empty()) ?
false :
true;
100 result = m_json->parse(&decompressed[0], decompressed.size());
102 return std::move(parseJson());
104 else if(m_json->parse(path))
106 return std::move(parseJson());
109 std::string msg =
"File not found: ";
110 msg += std::string(path.u8string());
124 if(decompressor !=
nullptr)
126 std::vector<uint8_t> decompressed = decompressor->decompress(data, size);
127 result = (decompressed.empty()) ?
false :
true;
130 result = m_json->parse(&decompressed[0], decompressed.size());
133 result = m_json->parse(data, size);
139 return std::move(parseJson());
147 std::unique_ptr<tson::Map> tson::Tileson::parseJson()
149 std::unique_ptr<tson::Map> map = std::make_unique<tson::Map>();
151 if(map->parse(*m_json, &m_decompressors))
152 return std::move(map);
166 return &m_decompressors;
Definition: Base64Decompressor.hpp:15
Definition: DecompressorContainer.hpp:16
void add(Args &&... args)
Definition: DecompressorContainer.hpp:34
Definition: IDecompressor.hpp:14
Definition: tileson_parser.hpp:54
std::unique_ptr< tson::Map > parse(const fs::path &path, std::unique_ptr< IDecompressor< std::vector< uint8_t >, std::vector< uint8_t >>> decompressor=nullptr)
Definition: tileson_parser.hpp:89
tson::DecompressorContainer * decompressors()
Definition: tileson_parser.hpp:164
Tileson(std::unique_ptr< tson::IJson > jsonParser, bool includeBase64Decoder=true)
Definition: tileson_parser.hpp:78
Definition: Base64.hpp:12