name add 0x00

This commit is contained in:
ouczbs 2024-11-20 21:18:48 +08:00
parent f51befaff0
commit aab1d81925
6 changed files with 19 additions and 17 deletions

View File

@ -1,6 +1,6 @@
metadatas: metadatas:
- guid: 7dfa8412-3278-43f6-b332-ac09a132025f - guid: 2b4239ff-796a-4b55-9d8f-272c80a16b17
name: "" name: ""
t_hash: "api::ShaderProgram\x06 mOwner!<21>/engine/assets/shader/simple.frag" t_hash: api::ShaderProgram
meta: ~ meta: ~
includes: ~ includes: ~

View File

@ -1,6 +1,6 @@
metadatas: metadatas:
- guid: 47c28b8c-f2aa-4357-a12d-7212de6e3a9e - guid: d05a5912-57ef-4447-b9cc-1e117c083ef3
name: "" name: ""
t_hash: "api::ShaderProgram\x06 mOwner!<21>/engine/assets/shader/simple.frag" t_hash: api::ShaderProgram
meta: ~ meta: ~
includes: ~ includes: ~

View File

@ -13,7 +13,7 @@ namespace gen {
} }
namespace YAML { namespace YAML {
inline Node APILoad(std::string_view text) { inline Node APILoad(std::string_view text) {
std::stringstream stream(text.data()); std::stringstream stream{ std::string(text) };
return Load(stream); return Load(stream);
} }
inline std::string_view APIDump(const Node& root) { inline std::string_view APIDump(const Node& root) {
@ -22,8 +22,9 @@ namespace YAML {
const char* data = emitter.c_str(); const char* data = emitter.c_str();
size_t size = emitter.size(); size_t size = emitter.size();
// 在 FramePool 上分配内存并拷贝数据 // 在 FramePool 上分配内存并拷贝数据
char* buffer = static_cast<char*>(FramePool()->allocate(size, alignof(std::max_align_t))); char* buffer = static_cast<char*>(FramePool()->allocate(size + 1, alignof(std::max_align_t)));
std::memcpy(buffer, data, size); std::memcpy(buffer, data, size);
buffer[size] = 0x00;
// 返回指向缓冲区的 string_view // 返回指向缓冲区的 string_view
return std::string_view(buffer, size); return std::string_view(buffer, size);
} }

View File

@ -16,11 +16,8 @@ namespace gen {
else if constexpr (std::is_enum_v<T>) { else if constexpr (std::is_enum_v<T>) {
*(T*)(ptr) = (T)node.as<uint32_t>(); *(T*)(ptr) = (T)node.as<uint32_t>();
} }
else if constexpr (is_string_view_v<T>) { else if constexpr (is_string_view_v<T> || is_string_v<T>) {
*(T*)(ptr) = node.as<std::string_view>(); *(T*)(ptr) = node.Scalar();
}
else if constexpr (is_string_v<T>) {
*(T*)(ptr) = node.as<std::string>();
} }
else { else {
//static_assert(false, "unknown json read type"); //static_assert(false, "unknown json read type");

View File

@ -68,6 +68,11 @@ namespace pmr {
void SetStringEntryHeader(StringEntryHeader _stringEntryHeader) { void SetStringEntryHeader(StringEntryHeader _stringEntryHeader) {
stringEntryHeader = _stringEntryHeader; stringEntryHeader = _stringEntryHeader;
} }
void SetStringData(const char* str, uint16_t size) {
memcpy(data, str, size);
data[size] = 0x00;
}
uint16_t GetSize()const { return stringEntryHeader.GetSize(); }
const char* GetData() const { return data; }; const char* GetData() const { return data; };
}; };
struct HashInfo { struct HashInfo {
@ -196,14 +201,14 @@ namespace pmr {
{ {
if (!flag3_memory29)return ""; if (!flag3_memory29)return "";
const StringEntry* stringEntry = UNIQUER_VAL(stringEntryMemoryManager).GetStringEntry(StringEntryHandle(flag3_memory29)); const StringEntry* stringEntry = UNIQUER_VAL(stringEntryMemoryManager).GetStringEntry(StringEntryHandle(flag3_memory29));
return std::string_view(stringEntry->GetData(), stringEntry->GetStringEntryHeader().GetSize()); return std::string_view(stringEntry->GetData(), stringEntry->GetSize());
} }
std::string ToString() const std::string ToString() const
{ {
if (!flag3_memory29)return ""; if (!flag3_memory29)return "";
const StringEntry* stringEntry = UNIQUER_VAL(stringEntryMemoryManager).GetStringEntry(StringEntryHandle(flag3_memory29)); const StringEntry* stringEntry = UNIQUER_VAL(stringEntryMemoryManager).GetStringEntry(StringEntryHandle(flag3_memory29));
return std::string(stringEntry->GetData(), stringEntry->GetStringEntryHeader().GetSize()); return std::string(stringEntry->GetData(), stringEntry->GetSize());
} }
}; };
} }

View File

@ -64,7 +64,7 @@ namespace pmr {
const Name::Slot& oldSlot = oldSlotArray[slotIndex]; const Name::Slot& oldSlot = oldSlotArray[slotIndex];
StringEntry* stringEntry = stringEntryMemoryManager.GetStringEntry(oldSlotArray[slotIndex].GetStringEntryHandle()); StringEntry* stringEntry = stringEntryMemoryManager.GetStringEntry(oldSlotArray[slotIndex].GetStringEntryHandle());
const HashInfo hashInfo(std::string_view(stringEntry->GetData(), stringEntry->GetStringEntryHeader().GetSize())); const HashInfo hashInfo(std::string_view(stringEntry->GetData(), stringEntry->GetSize()));
Name::Slot& slot = FindUnusedSlot(hashInfo); Name::Slot& slot = FindUnusedSlot(hashInfo);
@ -94,7 +94,7 @@ namespace pmr {
} }
inline Name::StringEntryHandle Name::StringEntryMemoryManager::AllocateStringEntry(StringEntryHeader stringEntryHeader, const char* data) inline Name::StringEntryHandle Name::StringEntryMemoryManager::AllocateStringEntry(StringEntryHeader stringEntryHeader, const char* data)
{ {
const uint32_t size = meta_align_size(sizeof(StringEntryHeader) + stringEntryHeader.GetSize(), ALIGN_BYTES); const uint32_t size = meta_align_size(sizeof(StringEntryHeader) + stringEntryHeader.GetSize() + 1, ALIGN_BYTES);
const uint32_t alignedSize = size >> 1; const uint32_t alignedSize = size >> 1;
StringEntryHandle stringEntryHandle{}; StringEntryHandle stringEntryHandle{};
@ -112,8 +112,7 @@ namespace pmr {
StringEntry* stringEntry = GetStringEntry(stringEntryHandle); StringEntry* stringEntry = GetStringEntry(stringEntryHandle);
stringEntry->SetStringEntryHeader(stringEntryHeader); stringEntry->SetStringEntryHeader(stringEntryHeader);
memcpy(const_cast<char*>(stringEntry->GetData()), data, stringEntryHeader.GetSize()); stringEntry->SetStringData(data, stringEntryHeader.GetSize());
return stringEntryHandle; return stringEntryHandle;
} }
inline void Name::StringEntryMemoryManager::CreateNewMemoryBlock() inline void Name::StringEntryMemoryManager::CreateNewMemoryBlock()