summaryrefslogtreecommitdiffhomepage
path: root/dev/lib/core
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-09-17 09:59:28 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-09-17 09:59:28 +0200
commitbba582964bded940f9dc280fd15ed84aa2db2d39 (patch)
tree5917d51d60b4680d09510cccde0fdf271660c0a2 /dev/lib/core
parent06202a559a54757090c04ae55ba21a24d97fdc85 (diff)
feat! lib: reorganize library (OCL v1.0.44)
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/lib/core')
-rw-r--r--dev/lib/core/allocator_system.hpp75
-rw-r--r--dev/lib/core/chunk_string.hpp102
2 files changed, 102 insertions, 75 deletions
diff --git a/dev/lib/core/allocator_system.hpp b/dev/lib/core/allocator_system.hpp
deleted file mode 100644
index 1243ed5..0000000
--- a/dev/lib/core/allocator_system.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * File: core/allocator_system.hpp
- * Purpose: Allocator System container.
- * Author: Amlal El Mahrouss (amlal@nekernel.org)
- * Copyright 2025, Amlal El Mahrouss. Licensed under the BSL 1.0 license
- */
-
-#ifndef _OCL_ALLOCATOR_SYSTEM_HPP
-#define _OCL_ALLOCATOR_SYSTEM_HPP
-
-#include <lib/core/includes.hpp>
-#include <stdexcept>
-#include <memory>
-
-namespace ocl
-{
- template <typename type>
- struct new_op final
- {
- inline auto operator()() -> type*
- {
- return new type;
- }
-
- template <typename... var_type>
- inline auto var_alloc(var_type... args) -> type*
- {
- return new type{args...};
- }
- };
-
- template <typename type>
- struct delete_op final
- {
- inline auto operator()(type* t) -> void
- {
- delete t;
- }
- };
-
- template <typename ret_type, typename allocator_new, typename allocator_delete>
- class allocator_system
- {
- allocator_new alloc_;
- allocator_delete del_;
-
- public:
- allocator_system() = default;
- ~allocator_system() = default;
-
- allocator_system& operator=(const allocator_system&) = delete;
- allocator_system(const allocator_system&) = delete;
-
- ret_type* claim() noexcept
- {
- return alloc_();
- }
-
- template <typename... var_type>
- auto construct(var_type... args) -> std::shared_ptr<ret_type>
- {
- return std::shared_ptr<ret_type>(alloc_.template var_alloc<var_type...>(args...), allocator_delete{});
- }
-
- void unclaim(ret_type* ptr)
- {
- del_(ptr);
- }
- };
-
- template <typename type>
- using standard_allocator_type = allocator_system<type, new_op<type>, delete_op<type>>;
-} // namespace ocl
-
-#endif // ifndef _OCL_ALLOCATOR_SYSTEM_HPP
diff --git a/dev/lib/core/chunk_string.hpp b/dev/lib/core/chunk_string.hpp
new file mode 100644
index 0000000..4fe5cc2
--- /dev/null
+++ b/dev/lib/core/chunk_string.hpp
@@ -0,0 +1,102 @@
+/*
+* File: core/chunk_string.hpp
+ * Purpose: String implementation for the OCL C++ library.
+ * Author: Amlal El Mahrouss (amlal@nekernel.org)
+ * Copyright 2025, Amlal El Mahrouss
+ */
+
+#ifndef OCL_UTILITY_CHUNK_STRING_HPP
+#define OCL_UTILITY_CHUNK_STRING_HPP
+
+#include <lib/core/includes.hpp>
+
+namespace ocl
+{
+ template <typename char_type, std::size_t max_chunk_size = 8196>
+ class basic_chunk_string;
+
+ template <typename char_type, std::size_t max_chunk_size>
+ class basic_chunk_string final
+ {
+ private:
+ char_type packed_chunks_[max_chunk_size] = {0};
+ std::size_t chunk_total_{};
+
+ bool bad_{false};
+
+ public:
+ const bool& bad{bad_};
+
+ basic_chunk_string() = default;
+
+ basic_chunk_string(const char_type* in)
+ {
+ this->operator+=(in);
+ }
+
+ basic_chunk_string(const std::basic_string<char_type>& in)
+ {
+ this->operator+=(in);
+ }
+
+ ~basic_chunk_string() = default;
+
+ basic_chunk_string& operator=(const basic_chunk_string&) = delete;
+ basic_chunk_string(const basic_chunk_string&) = delete;
+
+ public:
+ basic_chunk_string& operator+=(const std::basic_string<char_type>& in)
+ {
+ if (in.empty() || bad_)
+ return *this;
+
+ if (in.size() > max_chunk_size)
+ {
+ bad_ = true;
+ return *this;
+ }
+
+ if (chunk_total_ > max_chunk_size)
+ {
+ bad_ = true;
+ return *this;
+ }
+
+ const auto& sz = in.size();
+ const static auto size_max_chunk = max_chunk_size;
+ const auto& ptr = in.data();
+
+ if (chunk_total_ < size_max_chunk)
+ {
+ std::memcpy(packed_chunks_ + chunk_total_, ptr, sz);
+ chunk_total_ += sz;
+ }
+
+ return *this;
+ }
+
+ std::basic_string<char_type> str() const noexcept
+ {
+ static std::basic_string<char_type> ret;
+
+ if (ret.size() > 0)
+ ret.clear();
+
+ ret += packed_chunks_;
+
+ return ret;
+ }
+
+ void print() noexcept
+ {
+ ocl::io::print(packed_chunks_);
+ }
+ };
+
+ template <typename char_type>
+ inline void print(basic_chunk_string<char_type>& fmt) noexcept
+ {
+ fmt.print();
+ }
+} // namespace ocl
+#endif // ifndef OCL_UTILITY_CHUNK_STRING_HPP