Skip to content

Commit c8863dd

Browse files
authored
Low Budget Hash Map (#432)
* hash map???? * because format is my worst enemy * removing size from array initialization because i dont see the point of it * adding some string to hashmap test because why not * added initializer list and some tests for arrayview * some changes * make lists?? * clang format hates me * remove silly comments
1 parent 6a1b6f4 commit c8863dd

33 files changed

+920
-129
lines changed

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,6 @@
6464
[submodule "__externals/CLI11"]
6565
path = __externals/CLI11
6666
url = https://github.com/CLIUtils/CLI11
67+
[submodule "__externals/rapidhash/src"]
68+
path = __externals/rapidhash/src
69+
url = https://github.com/Nicoshev/rapidhash

CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ if (NOT LAUNCHER_ONLY)
5858
add_subdirectory (${EXTERNAL_DIR}/gtest)
5959
add_subdirectory (${EXTERNAL_DIR}/VulkanMemoryAllocator)
6060
add_subdirectory (${EXTERNAL_DIR}/tlsf)
61+
add_subdirectory (${EXTERNAL_DIR}/rapidhash)
6162
add_subdirectory (${EXTERNAL_DIR}/CLI11)
6263

6364
set (CMAKE_PREFIX_PATH

Tetragrama/Components/UIComponent.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22
#include <ImguiLayer.h>
3-
#include <ZEngine/Core/Container/Array.h>
3+
#include <ZEngine/Core/Containers/Array.h>
44
#include <ZEngine/Core/IRenderable.h>
55
#include <ZEngine/Core/IUpdatable.h>
66

@@ -24,11 +24,11 @@ namespace Tetragrama::Components
2424
CanBeClosed = closed;
2525
}
2626

27-
bool IsVisible = true;
28-
bool CanBeClosed = false;
29-
const char* Name = "";
30-
uint32_t ChildrenCount = 0;
31-
Tetragrama::Layers::ImguiLayer* ParentLayer = nullptr;
32-
ZEngine::Core::Container::Array<ZRawPtr(UIComponent)> Children = {};
27+
bool IsVisible = true;
28+
bool CanBeClosed = false;
29+
const char* Name = "";
30+
uint32_t ChildrenCount = 0;
31+
Tetragrama::Layers::ImguiLayer* ParentLayer = nullptr;
32+
ZEngine::Core::Containers::Array<ZRawPtr(UIComponent)> Children = {};
3333
};
3434
} // namespace Tetragrama::Components

Tetragrama/Editor.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <nlohmann/json.hpp>
77

88
using namespace ZEngine;
9-
using namespace ZEngine::Core::Container;
9+
using namespace ZEngine::Core::Containers;
1010
using namespace ZEngine::Core::Memory;
1111
using namespace ZEngine::Helpers;
1212
using namespace Tetragrama::Layers;
@@ -49,8 +49,8 @@ namespace Tetragrama
4949
std::string title = fmt::format("{0} - Active Scene : {1}", Context->ConfigurationPtr->ProjectName, Context->CurrentScenePtr->Name);
5050
Windows::WindowConfiguration window_conf = {.EnableVsync = true};
5151
window_conf.Title.init(&(Context->Arena), title.c_str());
52-
window_conf.RenderingLayerCollection.init(&(Context->Arena), 1, 0);
53-
window_conf.OverlayLayerCollection.init(&(Context->Arena), 1, 0);
52+
window_conf.RenderingLayerCollection.init(&(Context->Arena), 1);
53+
window_conf.OverlayLayerCollection.init(&(Context->Arena), 1);
5454

5555
window_conf.RenderingLayerCollection.push(CanvasLayer);
5656
window_conf.OverlayLayerCollection.push(UILayer);
@@ -74,10 +74,10 @@ namespace Tetragrama
7474
RenderScene = ZPushStructCtor(arena, ZEngine::Rendering::Scenes::GraphicScene);
7575
RenderScene->IsDrawDataDirty = true;
7676

77-
MeshFiles.init(arena, 1, 0);
78-
ModelFiles.init(arena, 1, 0);
79-
MaterialFiles.init(arena, 1, 0);
80-
Hashes.init(arena, 1, 0);
77+
MeshFiles.init(arena, 1);
78+
ModelFiles.init(arena, 1);
79+
MaterialFiles.init(arena, 1);
80+
Hashes.init(arena, 1);
8181
}
8282

8383
void EditorScene::Push(ZEngine::Core::Memory::ArenaAllocator* arena, const char* mesh, const char* model, const char* material)

Tetragrama/Editor.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include <EditorCameraController.h>
33
#include <Layers/ImguiLayer.h>
44
#include <Layers/RenderLayer.h>
5-
#include <ZEngine/Core/Container/Array.h>
6-
#include <ZEngine/Core/Container/Strings.h>
5+
#include <ZEngine/Core/Containers/Array.h>
6+
#include <ZEngine/Core/Containers/Strings.h>
77
#include <ZEngine/Core/Memory/Allocator.h>
88
#include <ZEngine/Engine.h>
99
#include <ZEngine/Helpers/IntrusivePtr.h>
@@ -23,19 +23,19 @@ namespace Tetragrama
2323

2424
EditorScene() = default;
2525

26-
void Initialize(ZEngine::Core::Memory::ArenaAllocator* arena, const char* scene_name = "");
27-
void Push(ZEngine::Core::Memory::ArenaAllocator* arena, const char* mesh, const char* model, const char* material);
28-
bool HasPendingChange() const;
26+
void Initialize(ZEngine::Core::Memory::ArenaAllocator* arena, const char* scene_name = "");
27+
void Push(ZEngine::Core::Memory::ArenaAllocator* arena, const char* mesh, const char* model, const char* material);
28+
bool HasPendingChange() const;
2929

30-
const char* Name = "";
31-
ZEngine::Core::Container::Array<ZEngine::Core::Container::String> MeshFiles = {};
32-
ZEngine::Core::Container::Array<ZEngine::Core::Container::String> ModelFiles = {};
33-
ZEngine::Core::Container::Array<ZEngine::Core::Container::String> MaterialFiles = {};
30+
const char* Name = "";
31+
ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String> MeshFiles = {};
32+
ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String> ModelFiles = {};
33+
ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String> MaterialFiles = {};
3434

35-
ZEngine::Core::Container::Array<ZEngine::Core::Container::String> Hashes = {};
36-
std::map<const char*, Model> Data = {};
35+
ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String> Hashes = {};
36+
std::map<const char*, Model> Data = {};
3737

38-
ZRawPtr(ZEngine::Rendering::Scenes::GraphicScene) RenderScene = nullptr;
38+
ZRawPtr(ZEngine::Rendering::Scenes::GraphicScene) RenderScene = nullptr;
3939

4040
private:
4141
std::atomic_bool m_has_pending_change;

Tetragrama/EditorWindow.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace Tetragrama
3838
return m_property.Width;
3939
}
4040

41-
ZEngine::Core::Container::StringView EditorWindow::GetTitle() const
41+
ZEngine::Core::Containers::StringView EditorWindow::GetTitle() const
4242
{
4343
return m_property.Title;
4444
}
@@ -48,7 +48,7 @@ namespace Tetragrama
4848
return m_property.IsMinimized;
4949
}
5050

51-
void EditorWindow::SetTitle(ZEngine::Core::Container::StringView title)
51+
void EditorWindow::SetTitle(ZEngine::Core::Containers::StringView title)
5252
{
5353
m_property.Title = title.data();
5454
glfwSetWindowTitle(m_native_window, m_property.Title);

Tetragrama/EditorWindow.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ namespace Tetragrama
1717

1818
uint32_t GetHeight() const override;
1919
uint32_t GetWidth() const override;
20-
ZEngine::Core::Container::StringView GetTitle() const override;
20+
ZEngine::Core::Containers::StringView GetTitle() const override;
2121
bool IsMinimized() const override;
22-
void SetTitle(ZEngine::Core::Container::StringView title) override;
22+
void SetTitle(ZEngine::Core::Containers::StringView title) override;
2323
bool IsVSyncEnable() const override;
2424
void SetVSync(bool value) override;
2525
void SetCallbackFunction(const EventCallbackFn& callback) override;

Tetragrama/Helpers/SerializerCommonHelper.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
#include <SerializerCommonHelper.h>
33
#include <ZEngine/Helpers/MemoryOperations.h>
44

5-
using namespace ZEngine::Core::Container;
5+
using namespace ZEngine::Core::Containers;
66

77
namespace Tetragrama::Helpers
88
{
9-
void SerializeStringData(std::ostream& os, ZEngine::Core::Container::StringView str)
9+
void SerializeStringData(std::ostream& os, ZEngine::Core::Containers::StringView str)
1010
{
1111
size_t f_count = str.size();
1212
os.write(reinterpret_cast<const char*>(&f_count), sizeof(size_t));
1313
os.write(str.data(), f_count + 1);
1414
}
1515

16-
void DeserializeStringData(ZEngine::Core::Memory::ArenaAllocator* Arena, std::istream& in, ZEngine::Core::Container::String& d)
16+
void DeserializeStringData(ZEngine::Core::Memory::ArenaAllocator* Arena, std::istream& in, ZEngine::Core::Containers::String& d)
1717
{
1818
size_t v_count;
1919
in.read(reinterpret_cast<char*>(&v_count), sizeof(size_t));
@@ -22,7 +22,7 @@ namespace Tetragrama::Helpers
2222
in.read(d.data(), v_count + 1);
2323
}
2424

25-
void SerializeStringArrayData(std::ostream& os, ZEngine::Core::Container::ArrayView<ZEngine::Core::Container::String> str_view)
25+
void SerializeStringArrayData(std::ostream& os, ZEngine::Core::Containers::ArrayView<ZEngine::Core::Containers::String> str_view)
2626
{
2727
size_t count = str_view.size();
2828
os.write(reinterpret_cast<const char*>(&count), sizeof(size_t));
@@ -49,7 +49,7 @@ namespace Tetragrama::Helpers
4949
os.write(reinterpret_cast<const char*>(flat_data.data()), sizeof(uint32_t) * flat_data.size());
5050
}
5151

52-
void DeserializeStringArrayData(ZEngine::Core::Memory::ArenaAllocator* Arena, std::istream& in, ZEngine::Core::Container::Array<ZEngine::Core::Container::String>& data)
52+
void DeserializeStringArrayData(ZEngine::Core::Memory::ArenaAllocator* Arena, std::istream& in, ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String>& data)
5353
{
5454
size_t data_count;
5555
in.read(reinterpret_cast<char*>(&data_count), sizeof(size_t));
+6-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
#pragma once
2-
#include <ZEngine/Core/Container/Array.h>
3-
#include <ZEngine/Core/Container/Strings.h>
2+
#include <ZEngine/Core/Containers/Array.h>
3+
#include <ZEngine/Core/Containers/Strings.h>
44
#include <ZEngine/Core/Memory/Allocator.h>
55
#include <iostream>
66
#include <unordered_map>
77

88
namespace Tetragrama::Helpers
99
{
10-
void SerializeStringData(std::ostream&, ZEngine::Core::Container::StringView);
11-
void SerializeStringArrayData(std::ostream&, ZEngine::Core::Container::ArrayView<ZEngine::Core::Container::String>);
10+
void SerializeStringData(std::ostream&, ZEngine::Core::Containers::StringView);
11+
void SerializeStringArrayData(std::ostream&, ZEngine::Core::Containers::ArrayView<ZEngine::Core::Containers::String>);
1212
void SerializeMapData(std::ostream&, const std::unordered_map<uint32_t, uint32_t>&);
1313

14-
void DeserializeStringData(ZEngine::Core::Memory::ArenaAllocator*, std::istream& in, ZEngine::Core::Container::String& data);
15-
void DeserializeStringArrayData(ZEngine::Core::Memory::ArenaAllocator*, std::istream&, ZEngine::Core::Container::Array<ZEngine::Core::Container::String>&);
14+
void DeserializeStringData(ZEngine::Core::Memory::ArenaAllocator*, std::istream& in, ZEngine::Core::Containers::String& data);
15+
void DeserializeStringArrayData(ZEngine::Core::Memory::ArenaAllocator*, std::istream&, ZEngine::Core::Containers::Array<ZEngine::Core::Containers::String>&);
1616
void DeserializeMapData(ZEngine::Core::Memory::ArenaAllocator*, std::istream&, std::unordered_map<uint32_t, uint32_t>&);
1717
} // namespace Tetragrama::Helpers

Tetragrama/Importers/AssimpImporter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ using namespace ZEngine::Helpers;
1111
using namespace Tetragrama::Helpers;
1212
using namespace ZEngine::Rendering::Meshes;
1313
using namespace ZEngine::Rendering::Scenes;
14-
using namespace ZEngine::Core::Container;
14+
using namespace ZEngine::Core::Containers;
1515

1616
namespace fs = std::filesystem;
1717

Tetragrama/Importers/IAssetImporter.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include <Helpers/IntrusivePtr.h>
33
#include <Rendering/Meshes/Mesh.h>
44
#include <Rendering/Scenes/GraphicScene.h>
5-
#include <ZEngine/Core/Container/Array.h>
6-
#include <ZEngine/Core/Container/Strings.h>
5+
#include <ZEngine/Core/Containers/Array.h>
6+
#include <ZEngine/Core/Containers/Strings.h>
77
#include <ZEngine/Core/Memory/Allocator.h>
88
#include <atomic>
99
#include <future>
@@ -25,20 +25,20 @@ namespace Tetragrama::Importers
2525
uint32_t VertexOffset = 0;
2626
uint32_t IndexOffset = 0;
2727
ZEngine::Rendering::Scenes::SceneRawData Scene = {};
28-
ZEngine::Core::Container::String Name = {};
29-
ZEngine::Core::Container::String SerializedMeshesPath = {};
30-
ZEngine::Core::Container::String SerializedMaterialsPath = {};
31-
ZEngine::Core::Container::String SerializedModelPath = {};
28+
ZEngine::Core::Containers::String Name = {};
29+
ZEngine::Core::Containers::String SerializedMeshesPath = {};
30+
ZEngine::Core::Containers::String SerializedMaterialsPath = {};
31+
ZEngine::Core::Containers::String SerializedModelPath = {};
3232
};
3333

3434
struct ImportConfiguration
3535
{
36-
ZEngine::Core::Container::String AssetFilename;
37-
ZEngine::Core::Container::String InputBaseAssetFilePath;
38-
ZEngine::Core::Container::String OutputModelFilePath;
39-
ZEngine::Core::Container::String OutputMeshFilePath;
40-
ZEngine::Core::Container::String OutputTextureFilesPath;
41-
ZEngine::Core::Container::String OutputMaterialsPath;
36+
ZEngine::Core::Containers::String AssetFilename;
37+
ZEngine::Core::Containers::String InputBaseAssetFilePath;
38+
ZEngine::Core::Containers::String OutputModelFilePath;
39+
ZEngine::Core::Containers::String OutputMeshFilePath;
40+
ZEngine::Core::Containers::String OutputTextureFilesPath;
41+
ZEngine::Core::Containers::String OutputMaterialsPath;
4242
};
4343

4444
struct IAssetImporter

Tetragrama/Layers/ImguiLayer.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
using namespace ZEngine;
1818
using namespace ZEngine::Rendering::Renderers;
1919
using namespace ZEngine::Windows::Events;
20-
using namespace ZEngine::Core::Container;
20+
using namespace ZEngine::Core::Containers;
2121
using namespace ZEngine::Helpers;
2222
using namespace Tetragrama::Messengers;
2323

@@ -29,7 +29,7 @@ namespace Tetragrama::Layers
2929
{
3030
arena->CreateSubArena(ZMega(5), &LayerArena);
3131

32-
NodeHierarchies.init(&LayerArena, 10, 0);
32+
NodeHierarchies.init(&LayerArena, 10);
3333

3434
auto dockspace_cmp = ZPushStructCtor(&LayerArena, Components::DockspaceUIComponent);
3535
auto scene_cmp = ZPushStructCtor(&LayerArena, Components::SceneViewportUIComponent);
@@ -48,7 +48,7 @@ namespace Tetragrama::Layers
4848
hierarchy_view_cmp->Initialize(this);
4949
demo_cmp->Initialize(this);
5050

51-
dockspace_cmp->Children.init(&LayerArena, 8, 7);
51+
dockspace_cmp->Children.init(&LayerArena, 8);
5252
dockspace_cmp->Children.push(scene_cmp);
5353
dockspace_cmp->Children.push(editor_log_cmp);
5454
dockspace_cmp->Children.push(demo_cmp);
@@ -121,9 +121,9 @@ namespace Tetragrama::Layers
121121
Array<int> children = {};
122122
Array<int> siblings = {};
123123

124-
roots.init(temp_arena.Arena, 1, 0);
125-
children.init(temp_arena.Arena, 1, 0);
126-
siblings.init(temp_arena.Arena, 1, 0);
124+
roots.init(temp_arena.Arena, 1);
125+
children.init(temp_arena.Arena, 1);
126+
siblings.init(temp_arena.Arena, 1);
127127

128128
uint32_t i = 0;
129129
for (auto& node : NodeHierarchies)

Tetragrama/Layers/ImguiLayer.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22
#include <UIComponent.h>
3-
#include <ZEngine/Core/Container/Array.h>
4-
#include <ZEngine/Core/Container/Strings.h>
3+
#include <ZEngine/Core/Containers/Array.h>
4+
#include <ZEngine/Core/Containers/Strings.h>
55
#include <ZEngine/Core/Memory/Allocator.h>
66
#include <ZEngine/Windows/Inputs/IInputEventCallback.h>
77
#include <ZEngine/Windows/Layers/Layer.h>
@@ -28,8 +28,8 @@ namespace Tetragrama::Layers
2828
ImguiLayer(const char* name = "ImGUI Layer") : Layer(name) {}
2929
virtual ~ImguiLayer();
3030

31-
ZEngine::Core::Container::Array<NodeHierarchy> NodeHierarchies = {};
32-
ZEngine::Core::Container::Array<uint32_t> NodeToRender = {};
31+
ZEngine::Core::Containers::Array<NodeHierarchy> NodeHierarchies = {};
32+
ZEngine::Core::Containers::Array<uint32_t> NodeToRender = {};
3333
std::map<uint32_t, ZRawPtr(Components::UIComponent)> NodeUIComponents = {};
3434

3535
virtual void Initialize(ZEngine::Core::Memory::ArenaAllocator* arena) override;

Tetragrama/Serializers/EditorSceneSerializer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
#include <Helpers/ThreadPool.h>
44
#include <Importers/IAssetImporter.h>
55
#include <Serializers/EditorSceneSerializer.h>
6-
#include <ZEngine/Core/Container/Array.h>
6+
#include <ZEngine/Core/Containers/Array.h>
77
#include <fmt/format.h>
88

99
using namespace ZEngine::Helpers;
10-
using namespace ZEngine::Core::Container;
10+
using namespace ZEngine::Core::Containers;
1111
using namespace Tetragrama::Helpers;
1212
using namespace Tetragrama::Importers;
1313

ZEngine/ZEngine/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ target_include_directories (zEngineLib
2323
.
2424
./Core
2525
./Core/Memory
26-
./Core/Container
26+
./Core/Containers
2727
./Hardwares
2828
./Helpers
2929
./Layers

ZEngine/ZEngine/Core/Container/Array.h renamed to ZEngine/ZEngine/Core/Containers/Array.h

+14-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
#pragma once
22
#include <Allocator.h>
3+
#include <InitializerList.h>
34
#include <type_traits>
45

5-
// using span ?
6-
76
using namespace ZEngine::Core::Memory;
87

9-
namespace ZEngine::Core::Container
8+
namespace ZEngine::Core::Containers
109
{
1110

1211
template <typename T>
@@ -21,15 +20,24 @@ namespace ZEngine::Core::Container
2120
using iterator = T*;
2221
using const_iterator = const T*;
2322

24-
void init(Memory::ArenaAllocator* allocator, size_type initial_capacity, size_type initial_size = 0U)
23+
void init(Memory::ArenaAllocator* allocator, size_type initial_capacity)
2524
{
2625
m_allocator = allocator;
27-
m_size = initial_size;
26+
m_size = 0;
2827
m_capacity = 0;
2928
m_data = nullptr;
3029
reserve(initial_capacity);
3130
}
3231

32+
void init(Memory::ArenaAllocator* allocator, size_type initial_capacity, const InitializerList<T>& list)
33+
{
34+
init(allocator, std::max(initial_capacity, list.size()));
35+
for (const auto& item : list)
36+
{
37+
push(item);
38+
}
39+
}
40+
3341
const_reference operator[](size_type index) const
3442
{
3543
ZENGINE_VALIDATE_ASSERT(index < m_size, "Index out of range")
@@ -219,4 +227,4 @@ namespace ZEngine::Core::Container
219227
T* m_data;
220228
size_t m_size;
221229
};
222-
} // namespace ZEngine::Core::Container
230+
} // namespace ZEngine::Core::Containers

0 commit comments

Comments
 (0)