diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-09-17 09:59:28 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-09-17 09:59:28 +0200 |
| commit | bba582964bded940f9dc280fd15ed84aa2db2d39 (patch) | |
| tree | 5917d51d60b4680d09510cccde0fdf271660c0a2 /dev/lib/core | |
| parent | 06202a559a54757090c04ae55ba21a24d97fdc85 (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.hpp | 75 | ||||
| -rw-r--r-- | dev/lib/core/chunk_string.hpp | 102 |
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 |
