bugfix
This commit is contained in:
parent
87f2eb7708
commit
2120ebb7d2
@ -14,7 +14,15 @@ namespace refl {
|
|||||||
void destruct() {
|
void destruct() {
|
||||||
cls->Destruct((void*)ptr);
|
cls->Destruct((void*)ptr);
|
||||||
}
|
}
|
||||||
Any malloc_any() {
|
void try_free(const Any& any, int size) {
|
||||||
|
if (any.cls == cls->parent && any.Size() > size) {
|
||||||
|
free((void*)any.ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Any try_malloc(void* memory, int size) {
|
||||||
|
if (cls->parent->size <= size) {
|
||||||
|
return { memory, cls->parent };
|
||||||
|
}
|
||||||
void* ptr = malloc(cls->parent->size);
|
void* ptr = malloc(cls->parent->size);
|
||||||
return { ptr, cls->parent };
|
return { ptr, cls->parent };
|
||||||
}
|
}
|
||||||
|
|||||||
@ -154,7 +154,7 @@ namespace refl {
|
|||||||
template<typename First,typename Second>
|
template<typename First,typename Second>
|
||||||
class UClass_Pair : public UClass {
|
class UClass_Pair : public UClass {
|
||||||
using UClass::UClass;
|
using UClass::UClass;
|
||||||
using MyUClass = UClass_Tuple<First, Second>;
|
using MyUClass = UClass_Pair<First, Second>;
|
||||||
using MyPair = std::pair<First, Second>;
|
using MyPair = std::pair<First, Second>;
|
||||||
public:
|
public:
|
||||||
std::array<FieldPtr, 2> Fields;
|
std::array<FieldPtr, 2> Fields;
|
||||||
|
|||||||
@ -95,13 +95,14 @@ namespace YAML
|
|||||||
if (res.IsSequence() && any.IsContainer()) {
|
if (res.IsSequence() && any.IsContainer()) {
|
||||||
auto docker = any.ToContainer();
|
auto docker = any.ToContainer();
|
||||||
docker.construct();
|
docker.construct();
|
||||||
Any any = docker.malloc_any();
|
char memory[STACK_MEMORY_SIZE];
|
||||||
|
Any any = docker.try_malloc(&memory, STACK_MEMORY_SIZE);
|
||||||
for (std::size_t i = 0; i < res.size(); i++) {
|
for (std::size_t i = 0; i < res.size(); i++) {
|
||||||
Unserialize(res[i], any);
|
Unserialize(res[i], any);
|
||||||
docker.insert(any);
|
docker.insert(any);
|
||||||
any.Destruct();
|
any.Destruct();
|
||||||
}
|
}
|
||||||
free((void*)any.ptr);
|
docker.try_free(any, STACK_MEMORY_SIZE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (res.IsSequence() && any.IsArray()) {
|
if (res.IsSequence() && any.IsArray()) {
|
||||||
|
|||||||
@ -20,5 +20,5 @@ namespace YAML
|
|||||||
{ static_cast<std::string>(t) } -> std::convertible_to<std::string>;
|
{ static_cast<std::string>(t) } -> std::convertible_to<std::string>;
|
||||||
};
|
};
|
||||||
#pragma endregion ToString
|
#pragma endregion ToString
|
||||||
|
#define STACK_MEMORY_SIZE 128
|
||||||
}
|
}
|
||||||
9
engine/3rdparty/zlib/test/yaml/main.cpp
vendored
9
engine/3rdparty/zlib/test/yaml/main.cpp
vendored
@ -24,20 +24,21 @@ void testMeta() {
|
|||||||
auto rmb2 = YAML::Text_Unserialize<MetaBundle>(rmb1);
|
auto rmb2 = YAML::Text_Unserialize<MetaBundle>(rmb1);
|
||||||
if (rmb2) {
|
if (rmb2) {
|
||||||
MetaBundle aa = rmb2.value();
|
MetaBundle aa = rmb2.value();
|
||||||
std::cout << "success!" << std::endl;
|
std::cout << "success!\n" << YAML::Text_Serialize(aa) << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void testTuple() {
|
void testTuple() {
|
||||||
std::map<int, string> table;
|
std::map<int, string> table;
|
||||||
table.insert(std::make_pair(111,"hello"));
|
table.insert(std::make_pair(111,"hello\nworld!!"));
|
||||||
table.insert(std::make_pair(222, "world"));
|
table.insert(std::make_pair(222, "yaml\n????"));
|
||||||
|
table.insert(std::make_pair(333, YAML::Text_Serialize(table)));
|
||||||
using T = std::map<int, string>;
|
using T = std::map<int, string>;
|
||||||
string rtable = YAML::Text_Serialize(table);
|
string rtable = YAML::Text_Serialize(table);
|
||||||
std::cout << rtable << std::endl;
|
std::cout << rtable << std::endl;
|
||||||
auto table2 = YAML::Text_Unserialize<std::map<int, string>>(rtable);
|
auto table2 = YAML::Text_Unserialize<std::map<int, string>>(rtable);
|
||||||
if (table2) {
|
if (table2) {
|
||||||
std::map<int, string> aa = table2.value();
|
std::map<int, string> aa = table2.value();
|
||||||
std::cout << "success!" << std::endl;
|
std::cout << "success!\n" << YAML::Text_Serialize(aa) << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using size_impl = size_t(*)(const void*);
|
using size_impl = size_t(*)(const void*);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user