bugfix
This commit is contained in:
parent
87f2eb7708
commit
2120ebb7d2
@ -14,7 +14,15 @@ namespace refl {
|
||||
void destruct() {
|
||||
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);
|
||||
return { ptr, cls->parent };
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ namespace refl {
|
||||
template<typename First,typename Second>
|
||||
class UClass_Pair : public UClass {
|
||||
using UClass::UClass;
|
||||
using MyUClass = UClass_Tuple<First, Second>;
|
||||
using MyUClass = UClass_Pair<First, Second>;
|
||||
using MyPair = std::pair<First, Second>;
|
||||
public:
|
||||
std::array<FieldPtr, 2> Fields;
|
||||
|
||||
@ -95,13 +95,14 @@ namespace YAML
|
||||
if (res.IsSequence() && any.IsContainer()) {
|
||||
auto docker = any.ToContainer();
|
||||
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++) {
|
||||
Unserialize(res[i], any);
|
||||
docker.insert(any);
|
||||
any.Destruct();
|
||||
}
|
||||
free((void*)any.ptr);
|
||||
docker.try_free(any, STACK_MEMORY_SIZE);
|
||||
return true;
|
||||
}
|
||||
if (res.IsSequence() && any.IsArray()) {
|
||||
|
||||
@ -20,5 +20,5 @@ namespace YAML
|
||||
{ static_cast<std::string>(t) } -> std::convertible_to<std::string>;
|
||||
};
|
||||
#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);
|
||||
if (rmb2) {
|
||||
MetaBundle aa = rmb2.value();
|
||||
std::cout << "success!" << std::endl;
|
||||
std::cout << "success!\n" << YAML::Text_Serialize(aa) << std::endl;
|
||||
}
|
||||
}
|
||||
void testTuple() {
|
||||
std::map<int, string> table;
|
||||
table.insert(std::make_pair(111,"hello"));
|
||||
table.insert(std::make_pair(222, "world"));
|
||||
table.insert(std::make_pair(111,"hello\nworld!!"));
|
||||
table.insert(std::make_pair(222, "yaml\n????"));
|
||||
table.insert(std::make_pair(333, YAML::Text_Serialize(table)));
|
||||
using T = std::map<int, string>;
|
||||
string rtable = YAML::Text_Serialize(table);
|
||||
std::cout << rtable << std::endl;
|
||||
auto table2 = YAML::Text_Unserialize<std::map<int, string>>(rtable);
|
||||
if (table2) {
|
||||
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*);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user