mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-13 07:45:39 +07:00
move xml and json assets to public headers
This commit is contained in:
@@ -6,15 +6,14 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/high/library.hpp>
|
||||
#include "../_high.hpp"
|
||||
|
||||
#include "json_utils.hpp"
|
||||
#include "../library.hpp"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
class json_asset final : public content_asset<json_asset, rapidjson::Document> {
|
||||
public:
|
||||
using content_asset<json_asset, rapidjson::Document>::content_asset;
|
||||
static load_async_result load_async(const library& library, str_view address);
|
||||
};
|
||||
}
|
||||
@@ -6,15 +6,14 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/high/library.hpp>
|
||||
#include "../_high.hpp"
|
||||
|
||||
#include "xml_utils.hpp"
|
||||
#include "../library.hpp"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
class xml_asset final : public content_asset<xml_asset, pugi::xml_document> {
|
||||
public:
|
||||
using content_asset<xml_asset, pugi::xml_document>::content_asset;
|
||||
static load_async_result load_async(const library& library, str_view address);
|
||||
};
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "image.hpp"
|
||||
#include "intrusive_list.hpp"
|
||||
#include "intrusive_ptr.hpp"
|
||||
#include "json_utils.hpp"
|
||||
#include "mesh.hpp"
|
||||
#include "module.hpp"
|
||||
#include "path.hpp"
|
||||
@@ -26,3 +27,4 @@
|
||||
#include "strings.inl"
|
||||
#include "time.hpp"
|
||||
#include "url.hpp"
|
||||
#include "xml_utils.hpp"
|
||||
|
||||
@@ -6,11 +6,16 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/high/_high.hpp>
|
||||
#include "_utils.hpp"
|
||||
|
||||
#include <3rdparty/rapidjson/schema.h>
|
||||
#include <3rdparty/rapidjson/document.h>
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
{
|
||||
void add_common_schema_definitions(rapidjson::Document& schema);
|
||||
}}
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
{
|
||||
bool try_parse_value(const rapidjson::Value& root, v2i& v) noexcept;
|
||||
@@ -46,8 +51,6 @@ namespace e2d { namespace json_utils
|
||||
bool try_parse_value(const rapidjson::Value& root, str16& s) noexcept;
|
||||
bool try_parse_value(const rapidjson::Value& root, str32& s) noexcept;
|
||||
bool try_parse_value(const rapidjson::Value& root, str_hash& s) noexcept;
|
||||
|
||||
void add_common_schema_definitions(rapidjson::Document& schema);
|
||||
}}
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
@@ -65,10 +68,10 @@ namespace e2d { namespace json_utils
|
||||
std::is_integral<T>::value &&
|
||||
std::is_signed<T>::value, bool>
|
||||
try_parse_value(const rapidjson::Value& root, T& v) noexcept {
|
||||
if ( !root.IsNumber() || !root.IsInt() ) {
|
||||
if ( !root.IsNumber() || !root.IsInt64() ) {
|
||||
return false;
|
||||
}
|
||||
const auto iv = root.GetInt();
|
||||
const auto iv = root.GetInt64();
|
||||
if ( iv < std::numeric_limits<T>::min() ) {
|
||||
return false;
|
||||
}
|
||||
@@ -84,11 +87,17 @@ namespace e2d { namespace json_utils
|
||||
std::is_integral<T>::value &&
|
||||
std::is_unsigned<T>::value, bool>
|
||||
try_parse_value(const rapidjson::Value& root, T& v) noexcept {
|
||||
i32 iv{0};
|
||||
if ( !try_parse_value(root, iv) || iv < 0 ) {
|
||||
if ( !root.IsNumber() || !root.IsUint64() ) {
|
||||
return false;
|
||||
}
|
||||
v = math::numeric_cast<T>(iv);
|
||||
const auto uv = root.GetUint64();
|
||||
if ( uv < std::numeric_limits<T>::min() ) {
|
||||
return false;
|
||||
}
|
||||
if ( uv > std::numeric_limits<T>::max() ) {
|
||||
return false;
|
||||
}
|
||||
v = math::numeric_cast<T>(uv);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -111,10 +120,7 @@ namespace e2d { namespace json_utils
|
||||
try_parse_value(
|
||||
std::declval<const rapidjson::Value&>(),
|
||||
std::declval<T&>()));
|
||||
}}
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
{
|
||||
template < typename T >
|
||||
std::enable_if_t<
|
||||
stdex::is_detected<json_utils::has_try_parse_value, T>::value,
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/high/_high.hpp>
|
||||
#include "_utils.hpp"
|
||||
|
||||
#include <3rdparty/pugixml/pugixml.hpp>
|
||||
|
||||
@@ -53,11 +53,11 @@ cp -rfv $MODULES_DIR/promise.hpp/jobber.hpp $HEADERS_RDPARTY_DIR/promise.hpp/job
|
||||
cp -rfv $MODULES_DIR/promise.hpp/promise.hpp $HEADERS_RDPARTY_DIR/promise.hpp/promise.hpp
|
||||
cp -rfv $MODULES_DIR/promise.hpp/scheduler.hpp $HEADERS_RDPARTY_DIR/promise.hpp/scheduler.hpp
|
||||
|
||||
mkdir -p $SOURCES_RDPARTY_DIR/pugixml
|
||||
cp -rfv $MODULES_DIR/pugixml/src/. $SOURCES_RDPARTY_DIR/pugixml/
|
||||
mkdir -p $HEADERS_RDPARTY_DIR/pugixml
|
||||
cp -rfv $MODULES_DIR/pugixml/src/. $HEADERS_RDPARTY_DIR/pugixml/
|
||||
|
||||
mkdir -p $SOURCES_RDPARTY_DIR/rapidjson
|
||||
cp -rfv $MODULES_DIR/rapidjson/include/rapidjson/. $SOURCES_RDPARTY_DIR/rapidjson
|
||||
mkdir -p $HEADERS_RDPARTY_DIR/rapidjson
|
||||
cp -rfv $MODULES_DIR/rapidjson/include/rapidjson/. $HEADERS_RDPARTY_DIR/rapidjson
|
||||
|
||||
mkdir -p $SOURCES_RDPARTY_DIR/stb
|
||||
cp -fv $MODULES_DIR/stb/stb_image.h $SOURCES_RDPARTY_DIR/stb/stb_image.h
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/atlas_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/sprite_asset.hpp>
|
||||
#include <enduro2d/high/assets/texture_asset.hpp>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/flipbook_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/atlas_asset.hpp>
|
||||
#include <enduro2d/high/assets/sprite_asset.hpp>
|
||||
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#include "json_asset.hpp"
|
||||
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/text_asset.hpp>
|
||||
|
||||
namespace
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/material_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/shader_asset.hpp>
|
||||
#include <enduro2d/high/assets/texture_asset.hpp>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/model_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/prefab_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/shader_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/text_asset.hpp>
|
||||
|
||||
namespace
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <enduro2d/high/assets/sprite_asset.hpp>
|
||||
|
||||
#include "json_asset.hpp"
|
||||
#include <enduro2d/high/assets/json_asset.hpp>
|
||||
#include <enduro2d/high/assets/atlas_asset.hpp>
|
||||
#include <enduro2d/high/assets/texture_asset.hpp>
|
||||
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#include "xml_asset.hpp"
|
||||
|
||||
#include <enduro2d/high/assets/xml_asset.hpp>
|
||||
#include <enduro2d/high/assets/text_asset.hpp>
|
||||
|
||||
namespace
|
||||
|
||||
@@ -4,7 +4,11 @@
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#include "json_utils.hpp"
|
||||
#include <enduro2d/utils/json_utils.hpp>
|
||||
|
||||
#include <enduro2d/utils/color.hpp>
|
||||
#include <enduro2d/utils/color32.hpp>
|
||||
#include <enduro2d/utils/strings.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -193,7 +197,6 @@ namespace
|
||||
if ( !defs_doc ) {
|
||||
rapidjson::Document doc;
|
||||
if ( doc.Parse(common_schema_definitions_source).HasParseError() ) {
|
||||
the<debug>().error("JSON_UTILS: Failed to parse common schema definitions");
|
||||
throw json_utils_exception();
|
||||
}
|
||||
defs_doc = std::make_unique<rapidjson::Document>(std::move(doc));
|
||||
@@ -201,6 +204,15 @@ namespace
|
||||
|
||||
return *defs_doc;
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
using namespace e2d;
|
||||
|
||||
//
|
||||
// vec
|
||||
//
|
||||
|
||||
template < std::size_t N, typename V, typename FV >
|
||||
bool parse_vN(const rapidjson::Value& root, V& v, FV&& f) noexcept {
|
||||
@@ -239,6 +251,26 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_vNi(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_vN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_vNf(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_vN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// mat
|
||||
//
|
||||
|
||||
template < std::size_t N, typename V, typename FV >
|
||||
bool parse_mN(const rapidjson::Value& root, V& v, FV&& f) noexcept {
|
||||
if ( root.IsArray() ) {
|
||||
@@ -268,6 +300,18 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_mNf(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_mN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// rect
|
||||
//
|
||||
|
||||
template < typename V, typename FV >
|
||||
bool parse_b2(const rapidjson::Value& root, rect<V>& b, FV&& f) {
|
||||
if ( root.IsObject() ) {
|
||||
@@ -311,6 +355,26 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b2i(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b2(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b2f(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b2(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// aabb
|
||||
//
|
||||
|
||||
template < typename V, typename FV >
|
||||
bool parse_b3(const rapidjson::Value& root, aabb<V>& b, FV&& f) {
|
||||
if ( root.IsObject() ) {
|
||||
@@ -354,6 +418,26 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b3i(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b3(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b3f(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b3(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// color
|
||||
//
|
||||
|
||||
bool parse_clr(const rapidjson::Value& root, color& c) {
|
||||
if ( root.IsNumber() ) {
|
||||
f32 cv = math::clamp(root.GetFloat(), 0.f, 1.f);
|
||||
@@ -391,6 +475,10 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// color32
|
||||
//
|
||||
|
||||
bool parse_clr(const rapidjson::Value& root, color32& c) {
|
||||
if ( root.IsNumber() ) {
|
||||
u8 cv = math::numeric_cast<u8>(math::clamp(root.GetInt(), 0, 255));
|
||||
@@ -427,64 +515,20 @@ namespace
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_vNi(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_vN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_vNf(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_vN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
template < u32 N, typename V >
|
||||
bool parse_mNf(const rapidjson::Value& root, V& v) noexcept {
|
||||
return parse_mN<N>(root, v, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b2i(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b2(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b2f(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b2(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b3i(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b3(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetInt();
|
||||
});
|
||||
}
|
||||
|
||||
template < typename B >
|
||||
bool parse_b3f(const rapidjson::Value& root, B& b) noexcept {
|
||||
return parse_b3(root, b, [](const rapidjson::Value& jv){
|
||||
E2D_ASSERT(jv.IsNumber());
|
||||
return jv.GetFloat();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
{
|
||||
void add_common_schema_definitions(rapidjson::Document& schema) {
|
||||
schema.AddMember(
|
||||
"common_definitions",
|
||||
rapidjson::Value(
|
||||
common_schema_definitions(),
|
||||
schema.GetAllocator()).Move(),
|
||||
schema.GetAllocator());
|
||||
}
|
||||
}}
|
||||
|
||||
namespace e2d { namespace json_utils
|
||||
{
|
||||
bool try_parse_value(const rapidjson::Value& root, v2i& v) noexcept {
|
||||
@@ -672,13 +716,4 @@ namespace e2d { namespace json_utils
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void add_common_schema_definitions(rapidjson::Document& schema) {
|
||||
schema.AddMember(
|
||||
"common_definitions",
|
||||
rapidjson::Value(
|
||||
common_schema_definitions(),
|
||||
schema.GetAllocator()).Move(),
|
||||
schema.GetAllocator());
|
||||
}
|
||||
}}
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#include "xml_utils.hpp"
|
||||
#include <enduro2d/utils/xml_utils.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
Reference in New Issue
Block a user