diff --git a/Makefile b/Makefile index b6a093d..647a95f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # assembler -AS = /home/selim/progs/bin/fasm +AS = /home/selim/blob/fasm/fasm ASFLAGS = #LINKER = ld #ASLDFLAGS = -lc -e main -dynamic-linker /lib64/ld-linux-x86-64.so.2 diff --git a/include/logger.h b/include/logger.h index 3a926ae..9ffc694 100644 --- a/include/logger.h +++ b/include/logger.h @@ -9,27 +9,28 @@ class logger { private: - std::atomic _isLogging; std::stringstream _logLine; public: logger(); - void log(const char* s); - - template void log(const char* s, const T& value, const Args&... args) + + template void log(const char* s, const Args&... args) { - if(!_isLogging) - { - _isLogging.store(true); - _logLine.str(""); - } + _logLine.str(""); + log_internal(s, args...); + } + +private: + void log_internal(const char* s); + template void log_internal(const char* s, const T& value, const Args&... args) + { while (*s) { if (*s == '%' && *++s != '%') { _logLine << value; - return log(s, args...); + return log_internal(s, args...); } _logLine << *s++; } diff --git a/include/ustring.h b/include/ustring.h index 81c9d4d..28d08d6 100755 --- a/include/ustring.h +++ b/include/ustring.h @@ -3,7 +3,6 @@ #include "utf.h" #include -#include /** * Класс строк, работающий с некоторыми кодировками юникода (UTF-8, UTF-16, UTF-32) diff --git a/src/logger.cpp b/src/logger.cpp index bfd1b4a..5a85b7f 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -4,18 +4,12 @@ logger ulog; -logger::logger(): _isLogging(ATOMIC_FLAG_INIT) +logger::logger() { } -void logger::log(const char *s) +void logger::log_internal(const char *s) { - if(!_isLogging) - { - _isLogging.store(true); - _logLine.str(""); - } - while (*s) { if (*s == '%' && *++s != '%') @@ -24,7 +18,5 @@ void logger::log(const char *s) } std::cout << _logLine.str() << std::endl; - - _isLogging.store(false); } diff --git a/test/main.cpp b/test/main.cpp index 4488b54..3f9d962 100755 --- a/test/main.cpp +++ b/test/main.cpp @@ -563,6 +563,13 @@ TEST(Ustring, replace_string) int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + //::testing::InitGoogleTest(&argc, argv); + //return RUN_ALL_TESTS(); + + int one = 1; + double two = 2.5; + ulog.log("one: %, two: %", one, two); + ulog.log("Hello world!"); + + return 0; } diff --git a/todo b/todo index de7a7b5..df5864a 100644 --- a/todo +++ b/todo @@ -1,9 +1,13 @@ Задачи на будущее +ustring: + 1. Сделать декодирование экранированных UCS-2 (\uXXXX) и UCS-4 (\UXXXXXXXX) символов опциональным (по умолчанию выключено), добавить соответствующий тест. - 2. В функции ucs4_to_utf8 добавить опциональное экранирование не-ANSI символов (по умолчанию выключено), добавить тесты. - 3. Тестирование на android. Можно сделать в QEMU виртуальную машину с ARM процессором. - 4. Сравнение по производительности с std::string, профилирование, оптимизация (возможно переписывание узких мест на ассемблере с использованием SIMD инструкций) + +logger + +1. Сделать несколько вариантов вывода +2. Сделать возможность отключения логов (что-то типа вывода в /dev/null, оверхед от логов в таком режиме должен быть минимален)