fix logger clang error

This commit is contained in:
2026-02-22 12:57:30 +03:00
parent ba5d76c49c
commit 28906c37b2
6 changed files with 61 additions and 67 deletions

View File

@@ -2,13 +2,14 @@
#include <set> #include <set>
#include <unordered_set> #include <unordered_set>
#include <map> #include <map>
#include "hack/logger/logger.hpp" #include "hack/logger/logger.new.hpp"
#include "hack/patterns/ring_buffer.hpp" #include "hack/patterns/ring_buffer.hpp"
#include "hack/utils/timestamp.hpp"
auto main(int argc, char *argv[]) -> int auto main(int argc, char *argv[]) -> int
{ {
std::string str = "hi"; std::string str = "hi";
hack::log()(str);
int i = 1; int i = 1;
double d = 2.0; double d = 2.0;
float f = 3.f; float f = 3.f;
@@ -32,6 +33,7 @@ auto main(int argc, char *argv[]) -> int
hack::log().set_devider(", "); hack::log().set_devider(", ");
hack::log()(1, i, 3.1f, f, 4.3, d, "asdf"); hack::log()(1, i, 3.1f, f, 4.3, d, "asdf");
hk::log()(i);
hack::log().set_devider(" = "); hack::log().set_devider(" = ");
hack::log().on_full_path(); hack::log().on_full_path();
@@ -69,7 +71,6 @@ auto main(int argc, char *argv[]) -> int
hack::log()(rb); hack::log()(rb);
hack::log()(str.c_str()); hack::log()(str.c_str());
hack::log()(str);
std::filesystem::path p { "/test/file/path.txt" }; std::filesystem::path p { "/test/file/path.txt" };
hack::log()(p); hack::log()(p);

View File

@@ -5,9 +5,9 @@ executable(
# 'examples/math/main.cpp', # 'examples/math/main.cpp',
# 'examples/range/main.cpp', # 'examples/range/main.cpp',
# 'examples/patterns/main.cpp', # 'examples/patterns/main.cpp',
# 'examples/logger/main.cpp', 'examples/logger/main.cpp',
# 'examples/exception/main.cpp', # 'examples/exception/main.cpp',
'examples/comparators/main.cpp', # 'examples/comparators/main.cpp',
dependencies : deps, dependencies : deps,
cpp_args: args, cpp_args: args,
include_directories : inc include_directories : inc

View File

@@ -1,3 +1,3 @@
Вся работа с аудио на данный момент крутиться во круг wav. Вся работа с аудио на данный момент крутиться во круг wav.
Т.е. что-то типа - воспроизвести/записать в mp3 или что-то подобное требует своей реализации, которой Т.е. что-то типа - воспроизвести/записать в mp3 или что-то подобное требует своей реализации, которой
буду заниматься по мерее её необходимости !!! буду заниматься по мере её необходимости !!!

View File

@@ -2,7 +2,6 @@
#include <vector> #include <vector>
#include <list> #include <list>
#include <iostream>
#include <map> #include <map>
#include <unordered_map> #include <unordered_map>
#include <forward_list> #include <forward_list>
@@ -265,10 +264,11 @@ namespace hack::concepts
template<typename Container, typename Key> template<typename Container, typename Key>
concept can_find = requires(Container c, Key&& key) { c.find(std::forward<Key>(key)); }; concept can_find = requires(Container c, Key&& key) { c.find(std::forward<Key>(key)); };
// для логирования собственных структур // для логирования собственных структур
// мало где используется, только в логере для проверки и выдачи сообщения // мало где используется, только в логере для проверки и выдачи сообщения
template<typename T> template<typename T>
concept has_get_logger_data = requires(T t) { concept has_get_logger_data = requires(T t)
{
{ t.get_logger_data() }; { t.get_logger_data() };
}; };
} }

View File

@@ -12,13 +12,42 @@
#include "hack/exception/exception.hpp" #include "hack/exception/exception.hpp"
// HERE // HERE
// и нужно сделать реализацию где выводлится все в одной линии но при помощи цикла // и нужно сделать реализацию где выводится все в одной линии но при помощи цикла
// типа такого: // типа такого:
// for (auto i : range) hack::log(hack::log::line)(i); // for (auto i : range) hack::log(hack::log::line)(i);
namespace hack namespace hack
{ {
class logger : public hack::patterns::singleton<logger> class logger : public hack::patterns::singleton<logger>
{ {
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: public:
void set_location(std::source_location location) { m_location = location; } void set_location(std::source_location location) { m_location = location; }
void set_devider(std::string devider) { m_devider = devider; } void set_devider(std::string devider) { m_devider = devider; }
@@ -43,34 +72,6 @@ namespace hack
void on_warn() { m_type = type::WARN; } void on_warn() { m_type = type::WARN; }
void on_error() { m_type = type::ERROR; } void on_error() { m_type = type::ERROR; }
public:
template<typename... Args>
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: private:
void prepare() void prepare()
{ {
@@ -115,15 +116,15 @@ namespace hack
void print_impl() { std::cout << std::endl; } void print_impl() { std::cout << std::endl; }
// для строк // для всех чисел
template<concepts::is_string T> template<concepts::is_number T>
void print_t(const T& data) void print_t(const T& data)
{ {
std::cout << data << (m_count != 0 ? m_devider : ""); std::cout << data << (m_count != 0 ? m_devider : "");
} }
// для всех чисел // для строк
template<concepts::is_number T> template<concepts::is_string T>
void print_t(const T& data) void print_t(const T& data)
{ {
std::cout << data << (m_count != 0 ? m_devider : ""); std::cout << data << (m_count != 0 ? m_devider : "");
@@ -133,7 +134,7 @@ namespace hack
{ {
std::cout << path.string() << (m_count != 0 ? m_devider : ""); std::cout << path.string() << (m_count != 0 ? m_devider : "");
} }
// для bool // для bool
template<concepts::is_bool T> template<concepts::is_bool T>
void print_t(const T& data) void print_t(const T& data)
@@ -228,7 +229,7 @@ namespace hack
// для пользовательских типов // для пользовательских типов
// у них должен быть отпределен метод get_logger_data() // у них должен быть отпределен метод get_logger_data()
// возвращающий один из обработанных типов // возвращающий один из обработанных типов
template<concepts::not_supported T> template<concepts::has_get_logger_data T>
void print_t(const T& rb) void print_t(const T& rb)
{ {
static_assert(concepts::has_get_logger_data<T>, "Type must have get_logger_data() method that returns value_type"); static_assert(concepts::has_get_logger_data<T>, "Type must have get_logger_data() method that returns value_type");
@@ -258,18 +259,9 @@ namespace hack
std::cout << key << ": "; std::cout << key << ": ";
if (value.type() == typeid(std::string)) if (value.type() == typeid(std::string))
{ print_t(std::any_cast<std::string>(value));
// HERE
// хотельсь бы написать так:
// print_t(std::any_cast<std::string>(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<std::string>(value).c_str());
}
else if (value.type() == typeid(std::filesystem::path)) else if (value.type() == typeid(std::filesystem::path))
print_t(std::any_cast<std::filesystem::path>(value).c_str()); print_t(std::any_cast<std::filesystem::path>(value).c_str());
// конец HERE выше
else if (value.type() == typeid(int)) else if (value.type() == typeid(int))
print_t(std::any_cast<int>(value)); print_t(std::any_cast<int>(value));
@@ -279,6 +271,7 @@ namespace hack
print_t(std::any_cast<float>(value)); print_t(std::any_cast<float>(value));
else if (value.type() == typeid(bool)) else if (value.type() == typeid(bool))
print_t(std::any_cast<bool>(value)); print_t(std::any_cast<bool>(value));
// vector // vector
else if (value.type() == typeid(std::vector<std::string>)) else if (value.type() == typeid(std::vector<std::string>))
print_t(std::any_cast<std::vector<std::string>>(value)); print_t(std::any_cast<std::vector<std::string>>(value));
@@ -288,6 +281,7 @@ namespace hack
print_t(std::any_cast<std::vector<double>>(value)); print_t(std::any_cast<std::vector<double>>(value));
else if (value.type() == typeid(std::vector<float>)) else if (value.type() == typeid(std::vector<float>))
print_t(std::any_cast<std::vector<float>>(value)); print_t(std::any_cast<std::vector<float>>(value));
// map // map
else if (value.type() == typeid(std::map<std::string, std::string>)) else if (value.type() == typeid(std::map<std::string, std::string>))
print_t(std::any_cast<std::map<std::string, std::string>>(value)); print_t(std::any_cast<std::map<std::string, std::string>>(value));
@@ -306,15 +300,14 @@ namespace hack
} }
} }
private: public:
std::source_location m_location; template<typename... Args>
std::size_t m_count = 0; void operator() (const Args&... args)
std::string m_devider = m_base_config.m_devider; {
bool m_on_func = m_base_config.m_on_func; m_count = sizeof...(Args);
bool m_on_full_path = m_base_config.m_on_full_path; prepare();
bool m_on_file = m_base_config.m_on_file; print_impl(args...);
bool m_on_row = m_base_config.m_on_row; }
bool m_bool_as_number = m_base_config.m_bool_as_number;
}; };
// основная функция вызова логера // основная функция вызова логера

View File

@@ -6,15 +6,15 @@ namespace hack::patterns
struct no_copy struct no_copy
{ {
no_copy() = default; no_copy() = default;
no_copy(const no_copy&&) = delete; no_copy(const no_copy&) = delete; // Было: const no_copy&&
no_copy operator=(const no_copy&&) = delete; no_copy& operator=(const no_copy&) = delete; // Было: const no_copy&&
}; };
struct no_move struct no_move
{ {
no_move() = default; no_move() = default;
no_move(no_move&&) = delete; no_move(no_move&&) = delete; // Было: no_move&&
no_move operator=(no_move&&) = delete; no_move& operator=(no_move&&) = delete; // Было: no_move&&
}; };
template<typename T> template<typename T>