Убрал булевский флаг
This commit is contained in:
parent
f118ef6f08
commit
8392f06b66
2
Makefile
2
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
|
||||
|
||||
@ -9,27 +9,28 @@
|
||||
class logger
|
||||
{
|
||||
private:
|
||||
std::atomic<bool> _isLogging;
|
||||
std::stringstream _logLine;
|
||||
|
||||
public:
|
||||
logger();
|
||||
void log(const char* s);
|
||||
|
||||
template<typename T, typename... Args> void log(const char* s, const T& value, const Args&... args)
|
||||
template<typename... Args> void log(const char* s, const Args&... args)
|
||||
{
|
||||
if(!_isLogging)
|
||||
{
|
||||
_isLogging.store(true);
|
||||
_logLine.str("");
|
||||
log_internal(s, args...);
|
||||
}
|
||||
|
||||
private:
|
||||
void log_internal(const char* s);
|
||||
|
||||
template<typename T, typename... Args> 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++;
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
|
||||
#include "utf.h"
|
||||
#include <iostream>
|
||||
#include <cstdint>
|
||||
|
||||
/**
|
||||
* Класс строк, работающий с некоторыми кодировками юникода (UTF-8, UTF-16, UTF-32)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
10
todo
10
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, оверхед от логов в таком режиме должен быть минимален)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user