From a8e99f3a783069cf85b626c6cfb2fbe83ae4fd44 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 29 Nov 2025 14:53:01 -0500 Subject: chore: new version of OCL and codebase cleanup. Signed-off-by: Amlal El Mahrouss --- include/.keep | 0 include/ocl/checksum/crc32.hpp | 81 +++++++++++ include/ocl/core/allocator_op.hpp | 74 ++++++++++ include/ocl/core/chunk_string.hpp | 2 +- include/ocl/core/equiv.hpp | 106 ++++++++++++++ include/ocl/core/error.hpp | 21 +++ include/ocl/core/error_handler.hpp | 1 - include/ocl/core/opt.hpp | 134 ++++++++++++++++++ include/ocl/except/error.hpp | 21 --- include/ocl/fix/parser.hpp | 5 +- include/ocl/io/print.hpp | 5 +- include/ocl/logic/equiv.hpp | 104 -------------- include/ocl/logic/math.hpp | 33 ----- include/ocl/logic/opt.hpp | 134 ------------------ include/ocl/memory/allocator_system.hpp | 74 ---------- include/ocl/memory/tracked_ptr.hpp | 241 -------------------------------- include/ocl/net/modem.hpp | 4 +- include/ocl/net/url.hpp | 164 ---------------------- include/ocl/simd/basic_simd.hpp | 53 ------- include/ocl/simd/simd.hpp | 61 -------- include/ocl/tests/gtest.hpp | 10 -- include/ocl/tests/hpptest.hpp | 97 ------------- include/ocl/utility/cgi.hpp | 79 ----------- include/ocl/utility/crc32.hpp | 81 ----------- include/ocl/utility/embfs.hpp | 81 ----------- 25 files changed, 423 insertions(+), 1243 deletions(-) create mode 100644 include/.keep create mode 100644 include/ocl/checksum/crc32.hpp create mode 100644 include/ocl/core/allocator_op.hpp create mode 100644 include/ocl/core/equiv.hpp create mode 100644 include/ocl/core/error.hpp create mode 100644 include/ocl/core/opt.hpp delete mode 100644 include/ocl/except/error.hpp delete mode 100644 include/ocl/logic/equiv.hpp delete mode 100644 include/ocl/logic/math.hpp delete mode 100644 include/ocl/logic/opt.hpp delete mode 100644 include/ocl/memory/allocator_system.hpp delete mode 100644 include/ocl/memory/tracked_ptr.hpp delete mode 100644 include/ocl/net/url.hpp delete mode 100644 include/ocl/simd/basic_simd.hpp delete mode 100644 include/ocl/simd/simd.hpp delete mode 100644 include/ocl/tests/gtest.hpp delete mode 100644 include/ocl/tests/hpptest.hpp delete mode 100644 include/ocl/utility/cgi.hpp delete mode 100644 include/ocl/utility/crc32.hpp delete mode 100644 include/ocl/utility/embfs.hpp (limited to 'include') diff --git a/include/.keep b/include/.keep new file mode 100644 index 0000000..e69de29 diff --git a/include/ocl/checksum/crc32.hpp b/include/ocl/checksum/crc32.hpp new file mode 100644 index 0000000..2bcab29 --- /dev/null +++ b/include/ocl/checksum/crc32.hpp @@ -0,0 +1,81 @@ +/* + * File: crc32.hpp + * Purpose: CRC32 module. + * Author: Amlal El Mahrouss, + * Copyright 2025, Amlal El Mahrouss, Licensed under the Boost Software License. + */ + +#ifndef _OCL_CRC32_HPP +#define _OCL_CRC32_HPP + +#include +#include +#include + +/// @brief Crc32 implementation in C++ +/// @author Amlal EL Mahrouss (amlal@nekernel.org) + +namespace ocl::crc32 +{ + namespace detail + { + inline constexpr const std::uint16_t crc_sz_ = 256U; + + inline std::uint32_t crc_array_[crc_sz_] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; + + template + inline std::uint32_t + crc32(const char_type* in, size_t len) noexcept + { + if (!in || *in == 0) + return 0; + + std::uint32_t crc = 0xffffffff; + + while ((len--) > 0) + crc = (crc >> 8) ^ crc_array_[(crc ^ *(in++)) & 0xFF]; + + return ~crc; + } + } // namespace detail + + template + inline std::uint32_t hash(const std::basic_string& in) + { + return detail::crc32(in.c_str(), in.size()); + } +} // namespace ocl::crc32 + +#endif // !_OCL_CRC32_HPP \ No newline at end of file diff --git a/include/ocl/core/allocator_op.hpp b/include/ocl/core/allocator_op.hpp new file mode 100644 index 0000000..8fb8ce9 --- /dev/null +++ b/include/ocl/core/allocator_op.hpp @@ -0,0 +1,74 @@ +/* + * File: core/allocator_op.hpp + * Purpose: Allocator System container. + * Author: Amlal El Mahrouss (amlal@nekernel.org) + * Copyright 2025, Amlal El Mahrouss, Licensed under the Boost Software License. Licensed under the BSL 1.0 license + */ + +#ifndef _OCL_ALLOCATOR_SYSTEM_HPP +#define _OCL_ALLOCATOR_SYSTEM_HPP + +#include +#include + +namespace ocl +{ + template + struct new_op final + { + inline auto operator()() -> type* + { + return new type; + } + + template + inline auto var_alloc(var_type... args) -> type* + { + return new type{args...}; + } + }; + + template + struct delete_op final + { + inline auto operator()(type* t) -> void + { + delete t; + } + }; + + template + class allocator_op + { + allocator_new m_alloc_{}; + allocator_delete m_free_{}; + + public: + allocator_op() = default; + ~allocator_op() = default; + + allocator_op& operator=(const allocator_op&) = delete; + allocator_op(const allocator_op&) = delete; + + ret_type* claim() + { + return m_alloc_(); + } + + template + auto construct(var_type... args) -> std::shared_ptr + { + return std::shared_ptr(m_alloc_.template var_alloc(args...), allocator_delete{}); + } + + void unclaim(ret_type* ptr) + { + m_free_(ptr); + } + }; + + template + using allocator_type = allocator_op, delete_op>; +} // namespace ocl + +#endif // ifndef _OCL_ALLOCATOR_SYSTEM_HPP \ No newline at end of file diff --git a/include/ocl/core/chunk_string.hpp b/include/ocl/core/chunk_string.hpp index ebcfda3..17d81bd 100644 --- a/include/ocl/core/chunk_string.hpp +++ b/include/ocl/core/chunk_string.hpp @@ -1,6 +1,6 @@ /* * File: core/chunk_string.hpp - * Purpose: String implementation for the OCL C++ library. + * Purpose: Chunked String implementation for the OCL C++ library. * Author: Amlal El Mahrouss (amlal@nekernel.org) * Copyright 2025, Amlal El Mahrouss */ diff --git a/include/ocl/core/equiv.hpp b/include/ocl/core/equiv.hpp new file mode 100644 index 0000000..f98d86d --- /dev/null +++ b/include/ocl/core/equiv.hpp @@ -0,0 +1,106 @@ +/* + * File: equiv.hpp + * Purpose: Equivalence header. + * Author: Amlal El Mahrouss (amlal@nekernel.org) + * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. + */ + +#pragma once + +#include + +/// @brief OCL equivalence namespace. +namespace ocl::equiv +{ + template + struct basic_hash_trait + { + /// @brief hash from T's result_type. + static typename T::result_type hash() + { + static T val; + return val.hash(); + } + }; + + template + struct is_same + { + static constexpr bool value = false; + + /// @brief check if hash matches what we expect. + constexpr bool operator()() noexcept + { + return T::hash() == U::hash(); + } + }; + + template + struct is_same + { + static constexpr bool value = true; + }; + + template + struct is_not_same + { + static constexpr bool value = true; + + constexpr bool operator()() noexcept + { + return T::hash() != U::hash(); + } + }; + + template + struct is_not_same + { + static constexpr bool value = false; + }; + + template + struct equiv_is_int8 + { + private: + T left_ = 127, right_ = 127; + + public: + using result_type = T; + + constexpr result_type hash() + { + return (left_ + right_) < 1; + } + }; + + template + struct equiv_not_int8 + { + private: + // these shall overflow if not int8. + T left_ = 127, right_ = 127; + + public: + using result_type = T; + + constexpr result_type hash() + { + return (left_ + right_) > 0; + } + }; + + template + struct equiv_is_real + { + private: + T left_ = 5, right_ = 3; + + public: + using result_type = T; + + constexpr result_type hash() + { + return left_ / right_ == 1; + } + }; +} // namespace ocl::equiv diff --git a/include/ocl/core/error.hpp b/include/ocl/core/error.hpp new file mode 100644 index 0000000..cf038f8 --- /dev/null +++ b/include/ocl/core/error.hpp @@ -0,0 +1,21 @@ +/* + * File: opt.hpp + * Author: Amlal El Mahrouss, + * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License + */ + +#ifndef _OCL_ERR_HPP +#define _OCL_ERR_HPP + +#include +#include + +namespace ocl::error +{ + using runtime_error = std::runtime_error; + using fix_error = runtime_error; + using math_error = runtime_error; + using cgi_error = runtime_error; +} // namespace ocl::error + +#endif // _OCL_ERR_HPP \ No newline at end of file diff --git a/include/ocl/core/error_handler.hpp b/include/ocl/core/error_handler.hpp index dcb0c89..971d91c 100644 --- a/include/ocl/core/error_handler.hpp +++ b/include/ocl/core/error_handler.hpp @@ -40,7 +40,6 @@ namespace ocl } }; - using standard_error_handler = basic_error_handler; using error_handler_type = basic_error_handler; } // namespace ocl diff --git a/include/ocl/core/opt.hpp b/include/ocl/core/opt.hpp new file mode 100644 index 0000000..506f582 --- /dev/null +++ b/include/ocl/core/opt.hpp @@ -0,0 +1,134 @@ +/* + * File: opt.hpp + * Author: Amlal El Mahrouss, + * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License + */ + +#ifndef _OCL_OPT_HPP +#define _OCL_OPT_HPP + +#include +#include + +namespace ocl +{ + enum class return_type + { + invalid = 0, + okay = 100, + err, + count = err - okay + 1, + }; + + template + struct opt final + { + explicit opt(const return_type& return_type) + : m_ret(return_type) + { + } + + opt& expect(const char_type* input) + { + if (m_ret == return_type::err) + { + throw std::runtime_error(input ? input : "opt::error"); + } + + return *this; + } + + template + opt& expect_or_handle(const char_type* input) + { + if (m_ret == return_type::err) + { + ErrorHandler err_handler; + err_handler(input ? input : "opt::error"); + } + + return *this; + } + + private: + return_type m_ret{return_type::invalid}; + }; + + template + inline return_type eval(Teller tell, Lst&&... arg) + { + return tell(std::forward(arg)...) ? return_type::okay : return_type::err; + } + + namespace traits + { + struct int_eq_teller + { + explicit int_eq_teller() + { + } + + bool operator()(int a, int b) + { + return (a == b); + } + }; + + struct int_greater_than_teller + { + explicit int_greater_than_teller() + { + } + + bool operator()(int a, int b) + { + return (a > b); + } + }; + + struct int_less_than_teller + { + explicit int_less_than_teller() + { + } + + bool operator()(int a, int b) + { + return (a < b); + } + }; + } // namespace traits + + template + inline return_type eval_less_than(Lst&&... arg) + { + static traits::int_less_than_teller eq; + return eq(std::forward(arg)...) ? return_type::okay : return_type::err; + } + + template + inline return_type eval_eq(Lst&&... arg) + { + static traits::int_eq_teller less_than; + return less_than(std::forward(arg)...) ? return_type::okay : return_type::err; + } + + template + inline return_type eval_greater_than(Lst&&... arg) + { + static traits::int_greater_than_teller greater_than; + return greater_than(std::forward(arg)...) ? return_type::okay : return_type::err; + } + + inline return_type eval_true() noexcept + { + return return_type::okay; + } + + inline return_type eval_false() noexcept + { + return return_type::err; + } +} // namespace ocl + +#endif /* ifndef _OCL_OPT_HPP */ \ No newline at end of file diff --git a/include/ocl/except/error.hpp b/include/ocl/except/error.hpp deleted file mode 100644 index cf038f8..0000000 --- a/include/ocl/except/error.hpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File: opt.hpp - * Author: Amlal El Mahrouss, - * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License - */ - -#ifndef _OCL_ERR_HPP -#define _OCL_ERR_HPP - -#include -#include - -namespace ocl::error -{ - using runtime_error = std::runtime_error; - using fix_error = runtime_error; - using math_error = runtime_error; - using cgi_error = runtime_error; -} // namespace ocl::error - -#endif // _OCL_ERR_HPP \ No newline at end of file diff --git a/include/ocl/fix/parser.hpp b/include/ocl/fix/parser.hpp index 02ab50c..3d24cf0 100644 --- a/include/ocl/fix/parser.hpp +++ b/include/ocl/fix/parser.hpp @@ -8,11 +8,12 @@ #ifndef _OCL_FIX_PARSER_HPP #define _OCL_FIX_PARSER_HPP -#include #include -#include #include +#include +#include + namespace ocl::fix { template diff --git a/include/ocl/io/print.hpp b/include/ocl/io/print.hpp index c710156..9629e05 100644 --- a/include/ocl/io/print.hpp +++ b/include/ocl/io/print.hpp @@ -8,6 +8,7 @@ #ifndef _OCL_PRINT_HPP #define _OCL_PRINT_HPP +#include #include namespace ocl::io @@ -18,9 +19,7 @@ namespace ocl::io std::cout << fmt; } - inline void print() noexcept - { - } + inline void print() noexcept {} template inline void print(Args... fmt) noexcept diff --git a/include/ocl/logic/equiv.hpp b/include/ocl/logic/equiv.hpp deleted file mode 100644 index 1bdb6d9..0000000 --- a/include/ocl/logic/equiv.hpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * File: equiv.hpp - * Purpose: Equivalence header. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. - */ - -#pragma once - -/// @brief OCL equivalence namespace. -namespace ocl::equiv -{ - template - struct basic_hash_trait - { - /// @brief hash from T's result_type. - static typename T::result_type hash() - { - static T val; - return val.hash(); - } - }; - - template - struct is_same - { - static constexpr bool value = false; - - /// @brief check if hash matches what we expect. - constexpr bool operator()() noexcept - { - return T::hash() == U::hash(); - } - }; - - template - struct is_same - { - static constexpr bool value = true; - }; - - template - struct is_not_same - { - static constexpr bool value = true; - - constexpr bool operator()() noexcept - { - return T::hash() != U::hash(); - } - }; - - template - struct is_not_same - { - static constexpr bool value = false; - }; - - template - struct equiv_is_int8 - { - private: - T left_ = 127, right_ = 127; - - public: - using result_type = T; - - constexpr result_type hash() - { - return (left_ + right_) < 1; - } - }; - - template - struct equiv_not_int8 - { - private: - // these shall overflow if not int8. - T left_ = 127, right_ = 127; - - public: - using result_type = T; - - constexpr result_type hash() - { - return (left_ + right_) > 0; - } - }; - - template - struct equiv_is_real - { - private: - T left_ = 5, right_ = 3; - - public: - using result_type = T; - - constexpr result_type hash() - { - return left_ / right_ == 1; - } - }; -} // namespace ocl::equiv diff --git a/include/ocl/logic/math.hpp b/include/ocl/logic/math.hpp deleted file mode 100644 index d131ef9..0000000 --- a/include/ocl/logic/math.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * File: math.hpp - * Purpose: Mathematics c++ header. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, Licensed under the Boost Software License. - */ - -#pragma once - -namespace ocl -{ - template <__SIZE_TYPE__ T> - struct is_non_boolean_integer final - { - static constexpr const bool value = true; - }; - - template <> - struct is_non_boolean_integer final - { - static constexpr const bool value = false; - }; - - template <> - struct is_non_boolean_integer final - { - static constexpr const bool value = false; - }; - - constexpr inline auto not_a_number = __builtin_nanf(""); - constexpr inline auto positive_infinity = __builtin_inff(); - constexpr inline auto negative_infinity = -positive_infinity; -} // namespace ocl \ No newline at end of file diff --git a/include/ocl/logic/opt.hpp b/include/ocl/logic/opt.hpp deleted file mode 100644 index ba76885..0000000 --- a/include/ocl/logic/opt.hpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - * File: opt.hpp - * Author: Amlal El Mahrouss, - * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License - */ - -#ifndef _OCL_OPT_HPP -#define _OCL_OPT_HPP - -#include -#include - -namespace ocl -{ - enum class return_type - { - invalid = 0, - okay = 100, - err, - count = err - okay + 1, - }; - - template - struct opt final - { - explicit opt(const return_type& return_type) - : m_ret(return_type) - { - } - - opt& expect(const char_type* input) - { - if (m_ret == return_type::err) - { - throw std::runtime_error(input ? input : "opt::error"); - } - - return *this; - } - - template - opt& expect_or_handle(const char_type* input) - { - if (m_ret == return_type::err) - { - ErrorHandler err_handler; - err_handler(input ? input : "opt::error"); - } - - return *this; - } - - private: - return_type m_ret{return_type::invalid}; - }; - - template - inline return_type eval(Teller tell, Lst&&... arg) - { - return tell(std::forward(arg)...) ? return_type::okay : return_type::err; - } - - namespace traits - { - struct int_eq_teller - { - explicit int_eq_teller() - { - } - - bool operator()(int a, int b) - { - return (a == b); - } - }; - - struct int_greater_than_teller - { - explicit int_greater_than_teller() - { - } - - bool operator()(int a, int b) - { - return (a > b); - } - }; - - struct int_less_than_teller - { - explicit int_less_than_teller() - { - } - - bool operator()(int a, int b) - { - return (a < b); - } - }; - } // namespace traits - - template - inline return_type eval_less_than(Lst&&... arg) - { - static traits::int_less_than_teller eq; - return eq(std::forward(arg)...) ? return_type::okay : return_type::err; - } - - template - inline return_type eval_eq(Lst&&... arg) - { - static traits::int_eq_teller less_than; - return less_than(std::forward(arg)...) ? return_type::okay : return_type::err; - } - - template - inline return_type eval_greater_than(Lst&&... arg) - { - static traits::int_greater_than_teller greater_than; - return greater_than(std::forward(arg)...) ? return_type::okay : return_type::err; - } - - inline return_type eval_true() noexcept - { - return return_type::okay; - } - - inline return_type eval_false() noexcept - { - return return_type::err; - } -} // namespace ocl - -#endif /* ifndef _OCL_OPT_HPP */ \ No newline at end of file diff --git a/include/ocl/memory/allocator_system.hpp b/include/ocl/memory/allocator_system.hpp deleted file mode 100644 index 345b612..0000000 --- a/include/ocl/memory/allocator_system.hpp +++ /dev/null @@ -1,74 +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 Boost Software License. Licensed under the BSL 1.0 license - */ - -#ifndef _OCL_ALLOCATOR_SYSTEM_HPP -#define _OCL_ALLOCATOR_SYSTEM_HPP - -#include -#include - -namespace ocl -{ - template - struct new_op final - { - inline auto operator()() -> type* - { - return new type; - } - - template - inline auto var_alloc(var_type... args) -> type* - { - return new type{args...}; - } - }; - - template - struct delete_op final - { - inline auto operator()(type* t) -> void - { - delete t; - } - }; - - template - class allocator_system - { - allocator_new m_alloc_{}; - allocator_delete m_free_{}; - - 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 m_alloc_(); - } - - template - auto construct(var_type... args) -> std::shared_ptr - { - return std::shared_ptr(m_alloc_.template var_alloc(args...), allocator_delete{}); - } - - void unclaim(ret_type* ptr) - { - m_free_(ptr); - } - }; - - template - using standard_allocator_type = allocator_system, delete_op>; -} // namespace ocl - -#endif // ifndef _OCL_ALLOCATOR_SYSTEM_HPP \ No newline at end of file diff --git a/include/ocl/memory/tracked_ptr.hpp b/include/ocl/memory/tracked_ptr.hpp deleted file mode 100644 index f763802..0000000 --- a/include/ocl/memory/tracked_ptr.hpp +++ /dev/null @@ -1,241 +0,0 @@ -/* - * File: memory/tracked_ptr.hpp - * Purpose: Strict pointer type implementation in C++ - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. - */ - -#pragma once - -#include -#include -#include -#include - -#include -#include -#include - -namespace ocl::memory -{ - template - class tracked_allocator; - - template - class tracked_mgr; - - template - class tracked_ptr; - - template - class tracked_allocator - { - public: - std::atomic allocated_count_ = 0; - std::atomic deallocated_count_ = 0; - - public: - explicit tracked_allocator() = default; - virtual ~tracked_allocator() = default; - - tracked_allocator& operator=(const tracked_allocator&) = default; - tracked_allocator(const tracked_allocator&) = default; - - public: - using pointer_type = T*; - - template - void retain(pointer_type& ptr, U&&... args) - { - ptr = new T(std::forward(args)...); - - if (ptr) - { - ++allocated_count_; - return; - } - - throw std::bad_alloc(); - } - - template - void must_retain(pointer_type& ptr, U&&... args) noexcept - { - this->retain(ptr, args...); - } - - void dispose(pointer_type& ptr) noexcept - { - if (ptr) - { - if (allocated_count_) - --allocated_count_; - - ++deallocated_count_; - - delete ptr; - ptr = nullptr; - } - } - }; - - template - class tracked_mgr - { - private: - tracked_allocator allocator_; - - public: - explicit tracked_mgr() = default; - virtual ~tracked_mgr() = default; - - tracked_mgr& operator=(const tracked_mgr&) = default; - tracked_mgr(const tracked_mgr&) = default; - - public: - using pointer_type = T*; - - const tracked_allocator& allocator() noexcept - { - return allocator_; - } - - template - pointer_type retain(U&&... args) - { - pointer_type ptr = nullptr; - allocator_.retain(ptr, std::forward(args)...); - - return ptr; - } - - template - pointer_type must_retain(U&&... args) noexcept - { - return this->retain(std::forward(args)...); - } - - void dispose(pointer_type& ptr) noexcept - { - allocator_.dispose(ptr); - } - }; - - template > - class tracked_ptr - { - public: - static Mgr& manager() noexcept - { - static Mgr mgr; - return mgr; - } - - public: - template - tracked_ptr(U&&... args) - : ptr_(nullptr) - { - ptr_ = tracked_ptr::manager().retain(std::forward(args)...); - } - - virtual ~tracked_ptr() noexcept - { - this->reset(); - } - - tracked_ptr(const tracked_ptr&) = delete; - tracked_ptr& operator=(const tracked_ptr&) = delete; - - public: - using pointer_type = T*; - - void reset() - { - if (ptr_) - { - tracked_ptr::manager().dispose(ptr_); - } - } - - pointer_type get() const - { - return ptr_; - } - - pointer_type data() - { - return ptr_; - } - - T& operator*() const - { - return *ptr_; - } - - pointer_type operator->() const - { - return ptr_; - } - - explicit operator bool() const - { - return ptr_ != nullptr; - } - - void swap(tracked_ptr& other) - { - std::swap(ptr_, other.ptr_); - } - - public: - tracked_ptr(tracked_ptr&& other) noexcept - : ptr_(other.ptr_) - { - other.ptr_ = nullptr; - } - - tracked_ptr& operator=(tracked_ptr&& other) noexcept - { - if (this != &other) - { - this->reset(); - ptr_ = other.ptr_; - other.ptr_ = nullptr; - } - - return *this; - } - - private: - pointer_type ptr_{nullptr}; - }; - - template - inline auto make_tracked() -> tracked_ptr - { - return tracked_ptr(); - } - - template - inline auto make_tracked(T&&... arg) -> tracked_ptr - { - return tracked_ptr(std::forward(arg)...); - } - - template - inline void swap(tracked_ptr& a, tracked_ptr& b) - { - a.swap(b); - } - - /// @brief a Must Pass function is a standard way to verify a container' validity, inspired from NeKernel/VMKernel. - template - inline void must_pass(tracked_ptr& ptr, error_handler handler) - { - if (ptr.manager().allocator().allocated_count_ < ptr.manager().allocator().deallocated_count_) - { - handler.template error("Invalid TrackedPtr detected: Deallocated count exceeds allocated count."); - } - } -} // namespace ocl::memory diff --git a/include/ocl/net/modem.hpp b/include/ocl/net/modem.hpp index 29db748..1e58d1d 100644 --- a/include/ocl/net/modem.hpp +++ b/include/ocl/net/modem.hpp @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include @@ -24,8 +24,6 @@ namespace ocl::net { - using namespace hpptest; - class modem; /// ============================================================================= diff --git a/include/ocl/net/url.hpp b/include/ocl/net/url.hpp deleted file mode 100644 index 71c18d6..0000000 --- a/include/ocl/net/url.hpp +++ /dev/null @@ -1,164 +0,0 @@ -/* - * File: net/url.hpp - * Purpose: URL container in modern C++ - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. - */ - -#pragma once - -#include - -#include -#include - -/// @author Amlal El Mahrouss (amlal@nekernel.org) -/// @brief Parse URIs/URLs/URNs (Non rfc3986 compliant.) - -namespace ocl::net -{ - template - class basic_url; - - /// @brief Basic URL parser container. - template - class basic_url final - { - public: - enum - { - invalid = 0, - http = 100, - https, - file, - ftp, - mailto = 200, - tel, - bad = 0xff, - }; - - private: - auto to_string_() - { - if (m_protocol_ == https) - return "https://"; - - if (m_protocol_ == http) - return "http://"; - - if (m_protocol_ == file) - return "file://"; - - if (m_protocol_ == tel) - return "tel:"; - - if (m_protocol_ == mailto) - return "mailto:"; - - return "invalid:"; - } - - auto to_enum_(const std::basic_string& protocol) - { - if (protocol == "https") - return https; - - if (protocol == "http") - return http; - - if (protocol == "file") - return file; - - if (protocol == "tel") - return tel; - - if (protocol == "mailto") - return mailto; - - return invalid; - } - - uint32_t m_protocol_{basic_url::invalid}; - std::basic_stringstream m_ss_{}; - std::basic_string m_port_{""}; - - public: - using ref_type = basic_url&; - - explicit basic_url(const uint32_t& protocol) - { - m_protocol_ = protocol; - } - - ~basic_url() = default; - - basic_url& operator=(const basic_url&) = default; - basic_url(const basic_url&) = default; - - public: - ref_type operator/=(const std::basic_string& in) - { - if (in.empty()) - return *this; - - if (in.starts_with(":")) - { - if (m_protocol_ == tel || m_protocol_ == mailto) - return *this; - - m_port_ = in.substr(1); - } - else if (in.starts_with("+")) - { - if (m_protocol_ != tel) - return *this; - - for (auto& ch : in) - { - if (ch == ' ') - return *this; - } - } - - m_ss_ << in; - - if (!in.ends_with("/")) - m_ss_ << "/"; - - return *this; - } - - explicit operator bool() - { - return this->is_valid(); - } - - public: - uint32_t protocol() const noexcept - { - return this->m_protocol_; - } - - std::basic_string port() const noexcept - { - return this->m_port_; - } - - std::basic_string assemble() noexcept - { - std::basic_string out = to_string_(); - out += this->m_ss_.str(); - - out.pop_back(); - - return out; - } - - bool is_valid() const noexcept - { - return m_ss_.size() > 0 && this->m_protocol_ != basic_url::bad || this->m_protocol_ != basic_url::invalid; - } - }; - - using url = basic_url; -} // namespace ocl::net diff --git a/include/ocl/simd/basic_simd.hpp b/include/ocl/simd/basic_simd.hpp deleted file mode 100644 index d9d405e..0000000 --- a/include/ocl/simd/basic_simd.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * File: simd/basic_simd.hpp - * Purpose: Basic SIMD backend C++ library. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the BSL 1.0 license. - */ - -#pragma once - -#include - -#ifdef __x86_64__ -#include -#endif - -#ifdef __aarch64__ -#include -#endif - -namespace ocl::simd -{ - struct OCL_DEPRECATED_MSG("Unmaintained since v1.0.51") basic_simd final - { -#ifdef __x86_64__ - using simd_type = __m256; -#endif - -#ifdef __aarch64__ - using simd_type = float32x4_t; -#endif - - struct simd_traits final - { - simd_type __val; - - private: - static bool bad; - friend class basic_simd; - }; - - using register_type = simd_traits; - - const bool& is_bad() noexcept - { - return register_type::bad; - } - - std::basic_string isa() - { - return "basic_simd"; - } - }; -} // namespace ocl::simd diff --git a/include/ocl/simd/simd.hpp b/include/ocl/simd/simd.hpp deleted file mode 100644 index 14d6922..0000000 --- a/include/ocl/simd/simd.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * File: simd/simd.hpp - * Purpose: SIMD C++ library. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the BSL 1.0 license. - */ - -#pragma once - -#include - -/// @author Amlal El Mahrouss -/// @brief Basic SIMD processor. - -namespace ocl::simd -{ - template - class OCL_DEPRECATED_MSG("Unmaintained since v1.0.51") real_type - { - private: - backend_type backend_; - - enum opcode - { - bad = 0, - add, - mul, - div, - invalid = 0xfff, - }; - - public: - real_type() = default; - virtual ~real_type() = default; - - real_type& operator=(const real_type&) = delete; - real_type(const real_type&) = delete; - - typename backend_type::register_type& call(const opcode& op, typename backend_type::register_type& lhs, typename backend_type::register_type& rhs) - { - switch (op) - { - case add: - return backend_.add(lhs, rhs); - case mul: - return backend_.mul(lhs, rhs); - case div: - return backend_.div(lhs, rhs); - default: - break; - } - - return backend_.is_bad(); - } - - std::basic_string isa() - { - return backend_.isa(); - } - }; -} // namespace ocl::simd diff --git a/include/ocl/tests/gtest.hpp b/include/ocl/tests/gtest.hpp deleted file mode 100644 index ee328b0..0000000 --- a/include/ocl/tests/gtest.hpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * File: tests/gtest.hpp - * Purpose: Google Test wrapper for the OCL library. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. - */ - -#pragma once - -#include diff --git a/include/ocl/tests/hpptest.hpp b/include/ocl/tests/hpptest.hpp deleted file mode 100644 index 0b5c54e..0000000 --- a/include/ocl/tests/hpptest.hpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * File: tests/hpptest.hpp - * Purpose: HPP Test wrapper for the OCL library. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. - */ - -#pragma once - -#include -#include -#include -#include -#include - -namespace ocl::hpptest -{ - /// @brief Standard termination error handler, called when a test fails. - struct standard_terminate final - { - template - static void error() noexcept - { - ocl::io::print("standard_terminate::error, terminating...\n"); - - if (stop_execution) - std::terminate(); - } - }; - -#ifdef __linux__ - using errno_t = error_t; -#endif - - struct posix_terminate final - { - template - static void error(errno_t err) noexcept - { - ocl::io::print("posix_terminate::error: expected=", strerror(args), ", got=", strerror(err), "\n"); - - if (stop_execution) - std::terminate(); - } - }; - - typedef bool condition_type; - - template - consteval inline void must_pass() - { -#ifdef OCL_HPPTEST - OCL_HPPTEST_ASSERT(expr); -#endif // _WIN32 - } - - template - inline void must_pass(condition_type cond) noexcept - { - if (cond != expect) - { - on_fail::template error(); - } - } - - template - inline void must_pass(errno_t ern) noexcept - { - if (ern != expect) - { - posix_terminate::error(ern); - } - } - -#ifdef _WIN32 - struct win32_terminate final - { - template - static void error(HRESULT err) noexcept - { - ocl::io::print("win32_terminate::error: expected=S_OK, got=", err, "\n"); - - if (stop_execution) - std::terminate(); - } - }; - - template - inline void must_pass(HRESULT hr) noexcept - { - if (hr != expect) - { - win32_terminate::error(hr); - } - } -#endif // _WIN32 -} // namespace ocl::hpptest diff --git a/include/ocl/utility/cgi.hpp b/include/ocl/utility/cgi.hpp deleted file mode 100644 index 8849c2d..0000000 --- a/include/ocl/utility/cgi.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * File: cgi.hpp - * Author: Amlal El Mahrouss, - * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License. - */ - -#ifndef _OCL_CGI_HPP -#define _OCL_CGI_HPP - -#include -#include -#include -#include - -namespace ocl -{ - namespace cgi - { - /// @brief CGI Writer class, writes to stdout; as CGI expects. - template - class basic_writer - { - private: - basic_writer& eval_(const basic_chunk_string& mime, const basic_chunk_string& ss) noexcept - { - std::basic_stringstream ss_out; - - ss_out << std::format("Content-Type: {}\r\n", mime.str()); - ss_out << std::format("Server: {}\r\n", "OCL/1.0"); - ss_out << std::format("Content-Length: {}\r\n\r\n", ss.str().size()); - ss_out << ss.str(); - - io::print(ss_out.str()); - - return *this; - } - - public: - explicit basic_writer() = default; - virtual ~basic_writer() = default; - - basic_writer& operator=(const basic_writer&) = default; - basic_writer(const basic_writer&) = default; - - public: - friend void operator<<(basic_writer& self, const basic_chunk_string& ss_in) - { - self = self.eval_("text/plain", ss_in); - } - - basic_writer& binary(const basic_chunk_string& ss_in) - { - return this->eval_("application/octet-stream", ss_in); - } - - basic_writer& html(const basic_chunk_string& ss_in) - { - return this->eval_("text/html", ss_in); - } - - basic_writer& xml(const basic_chunk_string& ss_in) - { - return this->eval_("application/xml", ss_in); - } - - basic_writer& json(const basic_chunk_string& ss_in) - { - return this->eval_("application/json", ss_in); - } - - basic_writer& js(const basic_chunk_string& ss_in) - { - return this->eval_("text/javascript", ss_in); - } - }; - } // namespace cgi -} // namespace ocl - -#endif // ifndef _OCL_CGI_HPP diff --git a/include/ocl/utility/crc32.hpp b/include/ocl/utility/crc32.hpp deleted file mode 100644 index 2bcab29..0000000 --- a/include/ocl/utility/crc32.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * File: crc32.hpp - * Purpose: CRC32 module. - * Author: Amlal El Mahrouss, - * Copyright 2025, Amlal El Mahrouss, Licensed under the Boost Software License. - */ - -#ifndef _OCL_CRC32_HPP -#define _OCL_CRC32_HPP - -#include -#include -#include - -/// @brief Crc32 implementation in C++ -/// @author Amlal EL Mahrouss (amlal@nekernel.org) - -namespace ocl::crc32 -{ - namespace detail - { - inline constexpr const std::uint16_t crc_sz_ = 256U; - - inline std::uint32_t crc_array_[crc_sz_] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - - template - inline std::uint32_t - crc32(const char_type* in, size_t len) noexcept - { - if (!in || *in == 0) - return 0; - - std::uint32_t crc = 0xffffffff; - - while ((len--) > 0) - crc = (crc >> 8) ^ crc_array_[(crc ^ *(in++)) & 0xFF]; - - return ~crc; - } - } // namespace detail - - template - inline std::uint32_t hash(const std::basic_string& in) - { - return detail::crc32(in.c_str(), in.size()); - } -} // namespace ocl::crc32 - -#endif // !_OCL_CRC32_HPP \ No newline at end of file diff --git a/include/ocl/utility/embfs.hpp b/include/ocl/utility/embfs.hpp deleted file mode 100644 index 8a716ce..0000000 --- a/include/ocl/utility/embfs.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * File: embfs.hpp - * Purpose: Embedded File System. - * Author: Amlal El Mahrouss (amlal@nekernel.org) - * Copyright 2025, Amlal El Mahrouss, Licensed under the Boost Software License. - */ - -#ifndef _OCL_EMBFS_HPP -#define _OCL_EMBFS_HPP - -#include -#include - -/// @brief A filesystem designed for tiny storage medias. -/// @author Amlal EL Mahrouss (amlal@nekernel.org) - -namespace ocl::embfs -{ - namespace traits - { - struct embfs_superblock; - struct embfs_inode; - - inline constexpr const size_t _superblock_name_len = 16; - inline constexpr const size_t _superblock_reserve_len = 462; - - inline constexpr const size_t _inode_name_len = 128; - inline constexpr const size_t _inode_arr_len = 12; - inline constexpr const size_t _inode_lookup_len = 8; - -#if defined(EMBFS_28BIT_LBA) - typedef std::uint32_t lba_t; -#elif defined(EMBFS_48BIT_LBA) - typedef std::uint64_t lba_t; -#else - typedef std::uint32_t lba_t; -#endif - - typedef std::int16_t sword_t; - - typedef std::int32_t sdword_t; - - typedef std::uint8_t utf8_char_t; - - /// @brief Superblock data structure - struct embfs_superblock - { - sword_t s_block_mag; - sdword_t s_num_inodes; - sdword_t s_part_size; - sdword_t s_part_used; - sdword_t s_version; - sword_t s_sector_sz; - lba_t s_inode_start; - lba_t s_inode_end; - utf8_char_t s_name[_superblock_name_len]; - utf8_char_t s_reserved[_superblock_reserve_len]; - }; - - /// @brief Indexed node structure. - /// @brief i_name file name - /// @brief i_size_virt, i_size_phys: virtual and physical (sector count) size. - /// @brief i_offset direct block pointer. - /// @brief i_checksum crc32 checksum. - /// @brief i_flags_perms flags and permissions - /// @brief i_acl_* ACL to keep track of inode allocation status. - struct embfs_inode - { - utf8_char_t i_name[_inode_name_len]; - sword_t i_size_virt, i_size_phys; - lba_t i_offset[_inode_lookup_len]; - sword_t i_checksum, i_flags_perms; - lba_t i_acl_creat, i_acl_edit, i_acl_delet; - }; - - /// @brief Indexed node linear array. - typedef embfs_inode embfs_inode_arr_t[_inode_arr_len]; - } // namespace traits -} // namespace ocl::embfs - -#endif // ifndef _OCL_EMBFS_HPP \ No newline at end of file -- cgit v1.2.3