diff --git a/.cache/clangd/index/main.cpp.DA64C8250A878209.idx b/.cache/clangd/index/main.cpp.DA64C8250A878209.idx new file mode 100644 index 0000000..5ba0978 Binary files /dev/null and b/.cache/clangd/index/main.cpp.DA64C8250A878209.idx differ diff --git a/.cache/clangd/index/toolkit.h.B9107599F4B246CF.idx b/.cache/clangd/index/toolkit.h.B9107599F4B246CF.idx new file mode 100644 index 0000000..4e0f61b Binary files /dev/null and b/.cache/clangd/index/toolkit.h.B9107599F4B246CF.idx differ diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..855844d --- /dev/null +++ b/.clangd @@ -0,0 +1,3 @@ +CompileFlags: + Add: [-std=c++23] + diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..555a306 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,15 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "configurationProvider": "mvector-of-bool.cmake-tools", + "cppStandard": "c++23" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0728772 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "*.cpp": "cpp", + "type_traits": "cpp" + } +} \ No newline at end of file diff --git a/include/ini.h b/include/ini.h new file mode 100644 index 0000000..e69de29 diff --git a/include/pch.h b/include/pch.h new file mode 100644 index 0000000..f72c596 --- /dev/null +++ b/include/pch.h @@ -0,0 +1,9 @@ +#ifndef PCH_H +#define PCH_H + +#include +#include +#include +#include + +#endif diff --git a/include/stringconv.h b/include/stringconv.h new file mode 100644 index 0000000..b24b9ef --- /dev/null +++ b/include/stringconv.h @@ -0,0 +1,66 @@ +#ifndef STRINGCONV_H +#define STRINGCONV_H +#include +#include +#include +#include +#include +#include +#include + +namespace ranges = std::ranges; +namespace views = std::ranges::views; +constexpr size_t buffer_size = 32; + +namespace string{ + template + requires std::is_same_v || std::is_same_v + inline std::string replace_string(const std::string &str, T d, T e) + { + std::string result = str; + if (d == e) + { + return result; + } + size_t len = 0; + while (true) + { + auto pos = result.find(d); + if (pos == std::string::npos) + { + return result; + } + if constexpr (std::is_same_v) + { + len = std::strlen(d); + } + else + { + len = d.length(); + } + result = result.replace(pos, len, e); + } + } + + template + requires std::is_same_v || + std::is_same_v + inline std::vector split(T str, T d) + { + auto v = views::split(str, d) | views::transform([](auto word) + { return T(word.begin(), word.end()); }); + return std::vector(v.begin(), v.end()); + } + + template + requires std::is_same_v || std::is_same_v + double round(T value, int c){ + auto temp = 1; + for(int i=0;i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ranges = std::ranges; -namespace views = std::ranges::views; - -// use for to_chars -constexpr size_t buffer_size = 32; - -template -concept _num_type = requires { - std::is_same_v || - std::is_same_v || - std::is_same_v || - std::is_same_v; -}; - -namespace toolkit -{ - enum class num_type{ - BIN, - HEX, - OCT, - DEC - } - - template - inline std::expected to_string(T value) - { - if constexpr (std::is_same_v || std::is_same_v || std::is_same_v) - { - char buffer[buffer_size]; - auto res = std::to_chars(buffer, buffer + buffer_size, value); - if (res.ec != std::errc()) - { - return std::unexpected(std::make_error_code(res.ec).message()); - } - return std::string(buffer, res.ptr - buffer); - } - else if constexpr (std::is_same_v::type, - char *>) - { - return std::to_string(value); - } - } - - template // requires std::is_same_v - inline std::expected stoi(const std::string &str) - { - T value; - auto res = std::from_chars(str.c_str(), str.c_str() + str.size(), value); - if (res.ec != std::errc()) - { - return std::unexpected(std::make_error_code(res.ec).message()); - } - return value; - } - - template - requires std::is_same_v || std::is_same_v - inline std::string replace_string(const std::string &str, T d, T e) - { - std::string result = str; - if (d == e) - { - return result; - } - size_t len = 0; - while (true) - { - auto pos = result.find(d); - if (pos == std::string::npos) - { - return result; - } - if constexpr (std::is_same_v) - { - len = std::strlen(d); - } - else - { - len = d.length(); - } - result = result.replace(pos, len, e); - } - } - - template - requires std::is_same_v || - std::is_same_v - inline std::vector split(T str, T d) - { - auto v = views::split(str, d) | views::transform([](auto word) - { return T(word.begin(), word.end()); }); - return std::vector(v.begin(), v.end()); - } - - template - requires std::is_same_v || std::is_same_v - double round(T value, int c){ - auto temp = 1; - for(int i=0;i +#include +#include + +namespace util{ + +template +inline std::expected to_string(T value) +{ + if constexpr (std::is_same_v || std::is_same_v || std::is_same_v) + { + char buffer[buffer_size]; + auto res = std::to_chars(buffer, buffer + buffer_size, value); + if (res.ec != std::errc()) + { + return std::unexpected(std::make_error_code(res.ec).message()); + } + return std::string(buffer, res.ptr - buffer); + } + else if constexpr (std::is_same_v::type, + char *>) + { + return std::to_string(value); + } +} + +template // requires std::is_same_v +inline std::expected stoi(const std::string &str) +{ + T value; + auto res = std::from_chars(str.c_str(), str.c_str() + str.size(), value); + if (res.ec != std::errc()) + { + return std::unexpected(std::make_error_code(res.ec).message()); + } + return value; +} + + inline std::string get_time_now(){ + auto time_now = std::chrono::system_clock::now(); + auto now_c = std::chrono::system_clock::to_time_t(time_now); + char buffer[32]; +#if defined(_WIN32) || defined(_WIN64) + auto _ = ctime_s(buffer, 32, &now_c); +#elif defined(__linux__) + auto _ = ctime_r(&now_c, buffer); +#endif + auto result = std::string(buffer); + result = string::replace_string(result, "\n", ""); + return std::move(result); + } + +} + + + +#endif