summaryrefslogtreecommitdiffhomepage
path: root/dev/examples/allocator_system
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-31 11:32:41 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-31 11:32:41 +0200
commit1ead9a09f39d417efa484475306baf13c1653142 (patch)
tree4575e481d92c401b1ea981e8004ecc28379d7c45 /dev/examples/allocator_system
parent63844b7567a32e27f739755d1e2a232c721e34e5 (diff)
feat: `allocator_system` a better implementation and example added.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/examples/allocator_system')
-rw-r--r--dev/examples/allocator_system/CMakeLists.txt16
-rw-r--r--dev/examples/allocator_system/allocator_system.cc43
2 files changed, 59 insertions, 0 deletions
diff --git a/dev/examples/allocator_system/CMakeLists.txt b/dev/examples/allocator_system/CMakeLists.txt
new file mode 100644
index 0000000..ee19842
--- /dev/null
+++ b/dev/examples/allocator_system/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+cmake_minimum_required(VERSION 3.15...3.31)
+
+project(
+ Alloc
+ VERSION 1.0
+ LANGUAGES CXX)
+
+find_package(Boost REQUIRED COMPONENTS container)
+
+add_executable(Alloc allocator_system.cc)
+
+target_link_libraries(Alloc PRIVATE Boost::container)
+
+set_property(TARGET Alloc PROPERTY CXX_STANDARD 20)
+target_include_directories(Alloc PUBLIC ../../)
diff --git a/dev/examples/allocator_system/allocator_system.cc b/dev/examples/allocator_system/allocator_system.cc
new file mode 100644
index 0000000..90248cd
--- /dev/null
+++ b/dev/examples/allocator_system/allocator_system.cc
@@ -0,0 +1,43 @@
+#include <lib/core/allocator_system.hpp>
+#include <iostream>
+
+struct MyClass
+{
+ int a;
+ std::string b;
+
+ MyClass() : a(0), b("default")
+ {
+ std::cout << "MyClass() constructed\n";
+ }
+
+ MyClass(int x, std::string y) : a(x), b(std::move(y))
+ {
+ std::cout << "MyClass(int, string) constructed\n";
+ }
+
+ ~MyClass()
+ {
+ std::cout << "~MyClass() destroyed\n";
+ }
+};
+
+int main()
+{
+ using Alloc = ocl::standard_allocator_type<MyClass>;
+ Alloc allocator;
+
+ // Test 1: claim() + unclaim()
+ std::cout << "=== Test 1: claim/unclaim ===\n";
+ MyClass* raw = allocator.claim();
+ std::cout << "raw->a = " << raw->a << ", raw->b = " << raw->b << "\n";
+ allocator.unclaim(raw); // Manual delete
+
+ // Test 2: construct() → shared_ptr
+ std::cout << "\n=== Test 2: construct (shared_ptr) ===\n";
+ auto ptr = allocator.construct<int, std::string>(42, "hello");
+ std::cout << "ptr->a = " << ptr->a << ", ptr->b = " << ptr->b << "\n";
+
+ // `shared_ptr` will automatically delete the object
+ std::cout << "\n=== End of main ===\n";
+}