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

View File

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

View File

@ -13,7 +13,7 @@ namespace gen {
}
namespace YAML {
inline Node APILoad(std::string_view text) {
std::stringstream stream(text.data());
std::stringstream stream{ std::string(text) };
return Load(stream);
}
inline std::string_view APIDump(const Node& root) {
@ -22,8 +22,9 @@ namespace YAML {
const char* data = emitter.c_str();
size_t size = emitter.size();
// 在 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);
buffer[size] = 0x00;
// 返回指向缓冲区的 string_view
return std::string_view(buffer, size);
}

View File

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

View File

@ -68,6 +68,11 @@ namespace pmr {
void SetStringEntryHeader(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; };
};
struct HashInfo {
@ -196,14 +201,14 @@ namespace pmr {
{
if (!flag3_memory29)return "";
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
{
if (!flag3_memory29)return "";
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];
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);
@ -94,7 +94,7 @@ namespace pmr {
}
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;
StringEntryHandle stringEntryHandle{};
@ -112,8 +112,7 @@ namespace pmr {
StringEntry* stringEntry = GetStringEntry(stringEntryHandle);
stringEntry->SetStringEntryHeader(stringEntryHeader);
memcpy(const_cast<char*>(stringEntry->GetData()), data, stringEntryHeader.GetSize());
stringEntry->SetStringData(data, stringEntryHeader.GetSize());
return stringEntryHandle;
}
inline void Name::StringEntryMemoryManager::CreateNewMemoryBlock()