summaryrefslogtreecommitdiffhomepage
path: root/examples/tracked_ptr
diff options
context:
space:
mode:
Diffstat (limited to 'examples/tracked_ptr')
-rw-r--r--examples/tracked_ptr/CMakeLists.txt12
-rw-r--r--examples/tracked_ptr/tracked_ptr.cc52
2 files changed, 64 insertions, 0 deletions
diff --git a/examples/tracked_ptr/CMakeLists.txt b/examples/tracked_ptr/CMakeLists.txt
new file mode 100644
index 0000000..ea1312a
--- /dev/null
+++ b/examples/tracked_ptr/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+cmake_minimum_required(VERSION 3.15...3.31)
+
+project(
+ Fix
+ VERSION 1.0
+ LANGUAGES CXX)
+
+add_executable(TrackedPtr tracked_ptr.cc)
+
+set_property(TARGET TrackedPtr PROPERTY CXX_STANDARD 20)
+target_include_directories(TrackedPtr PUBLIC ../../include/ocl)
diff --git a/examples/tracked_ptr/tracked_ptr.cc b/examples/tracked_ptr/tracked_ptr.cc
new file mode 100644
index 0000000..0f7c43d
--- /dev/null
+++ b/examples/tracked_ptr/tracked_ptr.cc
@@ -0,0 +1,52 @@
+/*
+ tracked_ptr example
+ written by Amlal El Mahrouss.
+ licensed under the Boost Software License
+ */
+
+#include <memory/tracked_ptr.hpp>
+#include <io/print.hpp>
+
+static void summon_tracked_ptr()
+{
+ ocl::memory::tracked_ptr<int> ptr = ocl::memory::make_tracked<int>(42);
+ std::cout << ptr.data() << "=" << ptr.manager().allocator().allocated_count_ << std::endl;
+}
+
+static void summon_leak_tracked_ptr()
+{
+ ocl::memory::tracked_ptr<int>* ptr = new ocl::memory::tracked_ptr<int>(42);
+ std::cout << ptr->data() << "=" << ptr->manager().allocator().allocated_count_ << std::endl;
+}
+
+/* finally test it */
+int main(int argc, char** argv)
+{
+ summon_tracked_ptr();
+ summon_tracked_ptr();
+ summon_tracked_ptr();
+ summon_tracked_ptr();
+
+ ocl::memory::tracked_ptr<int> ptr;
+
+ std::cout << ptr.data() << "=" << ptr.manager().allocator().allocated_count_ << std::endl;
+
+ std::cout << "total=" << ptr.manager().allocator().deallocated_count_ << std::endl;
+ std::cout << "leak-detected=" << std::boolalpha << (ptr.manager().allocator().allocated_count_ > ptr.manager().allocator().deallocated_count_) << std::endl;
+
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+ summon_leak_tracked_ptr();
+
+ std::cout << "total=" << ptr.manager().allocator().deallocated_count_ << std::endl;
+ std::cout << "leak-detected=" << std::boolalpha << (ptr.manager().allocator().allocated_count_ > ptr.manager().allocator().deallocated_count_) << std::endl;
+
+ ocl::memory::must_pass(ptr);
+
+ return EXIT_SUCCESS;
+}