move xml and json assets to public headers

This commit is contained in:
2019-05-01 10:00:15 +07:00
parent e857f0751b
commit 7456c3e0ad
56 changed files with 140 additions and 101 deletions

View File

@@ -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);
};
}

View File

@@ -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);
};
}

View File

@@ -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"

View File

@@ -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,

View File

@@ -6,7 +6,7 @@
#pragma once
#include <enduro2d/high/_high.hpp>
#include "_utils.hpp"
#include <3rdparty/pugixml/pugixml.hpp>

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -6,7 +6,7 @@
#include <enduro2d/high/assets/model_asset.hpp>
#include "json_asset.hpp"
#include <enduro2d/high/assets/json_asset.hpp>
namespace
{

View File

@@ -6,7 +6,7 @@
#include <enduro2d/high/assets/prefab_asset.hpp>
#include "json_asset.hpp"
#include <enduro2d/high/assets/json_asset.hpp>
namespace
{

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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());
}
}}

View File

@@ -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
{