diff --git a/bin/examples/logger/main.cpp b/bin/examples/logger/main.cpp index ae48e9e..2e063c7 100644 --- a/bin/examples/logger/main.cpp +++ b/bin/examples/logger/main.cpp @@ -2,13 +2,14 @@ #include #include #include -#include "hack/logger/logger.hpp" +#include "hack/logger/logger.new.hpp" #include "hack/patterns/ring_buffer.hpp" -#include "hack/utils/timestamp.hpp" auto main(int argc, char *argv[]) -> int { std::string str = "hi"; + hack::log()(str); + int i = 1; double d = 2.0; float f = 3.f; @@ -32,6 +33,7 @@ auto main(int argc, char *argv[]) -> int hack::log().set_devider(", "); hack::log()(1, i, 3.1f, f, 4.3, d, "asdf"); + hk::log()(i); hack::log().set_devider(" = "); hack::log().on_full_path(); @@ -69,7 +71,6 @@ auto main(int argc, char *argv[]) -> int hack::log()(rb); hack::log()(str.c_str()); - hack::log()(str); std::filesystem::path p { "/test/file/path.txt" }; hack::log()(p); diff --git a/bin/meson.build b/bin/meson.build index 3c264da..ae6ae80 100755 --- a/bin/meson.build +++ b/bin/meson.build @@ -5,9 +5,9 @@ executable( # 'examples/math/main.cpp', # 'examples/range/main.cpp', # 'examples/patterns/main.cpp', - # 'examples/logger/main.cpp', + 'examples/logger/main.cpp', # 'examples/exception/main.cpp', - 'examples/comparators/main.cpp', + # 'examples/comparators/main.cpp', dependencies : deps, cpp_args: args, include_directories : inc diff --git a/src/hack/audio/info.md b/src/hack/audio/info.md index 716b956..26537b9 100644 --- a/src/hack/audio/info.md +++ b/src/hack/audio/info.md @@ -1,3 +1,3 @@ Вся работа с аудио на данный момент крутиться во круг wav. Т.е. что-то типа - воспроизвести/записать в mp3 или что-то подобное требует своей реализации, которой -буду заниматься по мерее её необходимости !!! +буду заниматься по мере её необходимости !!! diff --git a/src/hack/concepts/concepts.hpp b/src/hack/concepts/concepts.hpp index fb6006d..70c218f 100755 --- a/src/hack/concepts/concepts.hpp +++ b/src/hack/concepts/concepts.hpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -265,10 +264,11 @@ namespace hack::concepts template concept can_find = requires(Container c, Key&& key) { c.find(std::forward(key)); }; - // для логирования собственных структур + // для логирования собственных структур // мало где используется, только в логере для проверки и выдачи сообщения template - concept has_get_logger_data = requires(T t) { + concept has_get_logger_data = requires(T t) + { { t.get_logger_data() }; }; } diff --git a/src/hack/logger/logger.hpp b/src/hack/logger/logger.hpp index 7629fad..b8bf1db 100755 --- a/src/hack/logger/logger.hpp +++ b/src/hack/logger/logger.hpp @@ -12,13 +12,42 @@ #include "hack/exception/exception.hpp" // HERE -// и нужно сделать реализацию где выводлится все в одной линии но при помощи цикла +// и нужно сделать реализацию где выводится все в одной линии но при помощи цикла // типа такого: // for (auto i : range) hack::log(hack::log::line)(i); namespace hack { class logger : public hack::patterns::singleton { + private: + // настройки по умолчанию + struct config + { + bool m_on_file = true; // показывать/не показывать название файла/пути в выоде логов + bool m_on_full_path = false; // показывать/не показывать название файла/пути в выоде логов + bool m_on_func = false; // показывать/не показывать название функции в выоде логов + bool m_on_row = true; // показывать/не показывать номер строки в выоде логов + bool m_bool_as_number = false; // показывет bool как число или как текст (0, false); + std::string m_devider = " "; // разделитель по умолчанию + } m_base_config; + + enum class type + { + LOG, + WARN, + ERROR + } m_type; + + private: + std::source_location m_location; + std::size_t m_count = 0; + std::string m_devider = m_base_config.m_devider; + bool m_on_func = m_base_config.m_on_func; + bool m_on_full_path = m_base_config.m_on_full_path; + bool m_on_file = m_base_config.m_on_file; + bool m_on_row = m_base_config.m_on_row; + bool m_bool_as_number = m_base_config.m_bool_as_number; + public: void set_location(std::source_location location) { m_location = location; } void set_devider(std::string devider) { m_devider = devider; } @@ -43,34 +72,6 @@ namespace hack void on_warn() { m_type = type::WARN; } void on_error() { m_type = type::ERROR; } - public: - template - void operator() (const Args&... args) - { - m_count = sizeof...(Args); - prepare(); - print_impl(args...); - } - - private: - // настройки по умолчанию - struct config - { - bool m_on_file = true; // показывать/не показывать название файла/пути в выоде логов - bool m_on_full_path = false; // показывать/не показывать название файла/пути в выоде логов - bool m_on_func = false; // показывать/не показывать название функции в выоде логов - bool m_on_row = true; // показывать/не показывать номер строки в выоде логов - bool m_bool_as_number = false; // показывет bool как число или как текст (0, false); - std::string m_devider = " "; // разделитель по умолчанию - } m_base_config; - - enum class type - { - LOG, - WARN, - ERROR - } m_type; - private: void prepare() { @@ -115,15 +116,15 @@ namespace hack void print_impl() { std::cout << std::endl; } - // для строк - template + // для всех чисел + template void print_t(const T& data) { std::cout << data << (m_count != 0 ? m_devider : ""); } - // для всех чисел - template + // для строк + template void print_t(const T& data) { std::cout << data << (m_count != 0 ? m_devider : ""); @@ -133,7 +134,7 @@ namespace hack { std::cout << path.string() << (m_count != 0 ? m_devider : ""); } - + // для bool template void print_t(const T& data) @@ -228,7 +229,7 @@ namespace hack // для пользовательских типов // у них должен быть отпределен метод get_logger_data() // возвращающий один из обработанных типов - template + template void print_t(const T& rb) { static_assert(concepts::has_get_logger_data, "Type must have get_logger_data() method that returns value_type"); @@ -258,18 +259,9 @@ namespace hack std::cout << key << ": "; if (value.type() == typeid(std::string)) - { - // HERE - // хотельсь бы написать так: - // print_t(std::any_cast(value)); - // но по какой-то причине на эту запись ругается clangd - //  Client clangd quit with exit code 0 and signal 11. Check log for errors: /home/chatlanin/.local/state/nvim/lsp.log - // когда они это порявят напишем а пока... пише так: - print_t(std::any_cast(value).c_str()); - } + print_t(std::any_cast(value)); else if (value.type() == typeid(std::filesystem::path)) print_t(std::any_cast(value).c_str()); - // конец HERE выше else if (value.type() == typeid(int)) print_t(std::any_cast(value)); @@ -279,6 +271,7 @@ namespace hack print_t(std::any_cast(value)); else if (value.type() == typeid(bool)) print_t(std::any_cast(value)); + // vector else if (value.type() == typeid(std::vector)) print_t(std::any_cast>(value)); @@ -288,6 +281,7 @@ namespace hack print_t(std::any_cast>(value)); else if (value.type() == typeid(std::vector)) print_t(std::any_cast>(value)); + // map else if (value.type() == typeid(std::map)) print_t(std::any_cast>(value)); @@ -306,15 +300,14 @@ namespace hack } } - private: - std::source_location m_location; - std::size_t m_count = 0; - std::string m_devider = m_base_config.m_devider; - bool m_on_func = m_base_config.m_on_func; - bool m_on_full_path = m_base_config.m_on_full_path; - bool m_on_file = m_base_config.m_on_file; - bool m_on_row = m_base_config.m_on_row; - bool m_bool_as_number = m_base_config.m_bool_as_number; + public: + template + void operator() (const Args&... args) + { + m_count = sizeof...(Args); + prepare(); + print_impl(args...); + } }; // основная функция вызова логера diff --git a/src/hack/patterns/singleton.hpp b/src/hack/patterns/singleton.hpp index 97d2326..148a245 100644 --- a/src/hack/patterns/singleton.hpp +++ b/src/hack/patterns/singleton.hpp @@ -6,15 +6,15 @@ namespace hack::patterns struct no_copy { no_copy() = default; - no_copy(const no_copy&&) = delete; - no_copy operator=(const no_copy&&) = delete; + no_copy(const no_copy&) = delete; // Было: const no_copy&& + no_copy& operator=(const no_copy&) = delete; // Было: const no_copy&& }; struct no_move { no_move() = default; - no_move(no_move&&) = delete; - no_move operator=(no_move&&) = delete; + no_move(no_move&&) = delete; // Было: no_move&& + no_move& operator=(no_move&&) = delete; // Было: no_move&& }; template