Убрал булевский флаг

This commit is contained in:
selim 2014-08-23 23:32:17 +04:00
parent f118ef6f08
commit 8392f06b66
6 changed files with 30 additions and 27 deletions

View File

@ -1,5 +1,5 @@
# assembler # assembler
AS = /home/selim/progs/bin/fasm AS = /home/selim/blob/fasm/fasm
ASFLAGS = ASFLAGS =
#LINKER = ld #LINKER = ld
#ASLDFLAGS = -lc -e main -dynamic-linker /lib64/ld-linux-x86-64.so.2 #ASLDFLAGS = -lc -e main -dynamic-linker /lib64/ld-linux-x86-64.so.2

View File

@ -9,27 +9,28 @@
class logger class logger
{ {
private: private:
std::atomic<bool> _isLogging;
std::stringstream _logLine; std::stringstream _logLine;
public: public:
logger(); 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) _logLine.str("");
{ log_internal(s, args...);
_isLogging.store(true); }
_logLine.str("");
}
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) while (*s)
{ {
if (*s == '%' && *++s != '%') if (*s == '%' && *++s != '%')
{ {
_logLine << value; _logLine << value;
return log(s, args...); return log_internal(s, args...);
} }
_logLine << *s++; _logLine << *s++;
} }

View File

@ -3,7 +3,6 @@
#include "utf.h" #include "utf.h"
#include <iostream> #include <iostream>
#include <cstdint>
/** /**
* Класс строк, работающий с некоторыми кодировками юникода (UTF-8, UTF-16, UTF-32) * Класс строк, работающий с некоторыми кодировками юникода (UTF-8, UTF-16, UTF-32)

View File

@ -4,18 +4,12 @@
logger ulog; 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) while (*s)
{ {
if (*s == '%' && *++s != '%') if (*s == '%' && *++s != '%')
@ -24,7 +18,5 @@ void logger::log(const char *s)
} }
std::cout << _logLine.str() << std::endl; std::cout << _logLine.str() << std::endl;
_isLogging.store(false);
} }

View File

@ -563,6 +563,13 @@ TEST(Ustring, replace_string)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
::testing::InitGoogleTest(&argc, argv); //::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); //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
View File

@ -1,9 +1,13 @@
Задачи на будущее Задачи на будущее
ustring:
1. Сделать декодирование экранированных UCS-2 (\uXXXX) и UCS-4 (\UXXXXXXXX) символов опциональным (по умолчанию выключено), добавить соответствующий тест. 1. Сделать декодирование экранированных UCS-2 (\uXXXX) и UCS-4 (\UXXXXXXXX) символов опциональным (по умолчанию выключено), добавить соответствующий тест.
2. В функции ucs4_to_utf8 добавить опциональное экранирование не-ANSI символов (по умолчанию выключено), добавить тесты. 2. В функции ucs4_to_utf8 добавить опциональное экранирование не-ANSI символов (по умолчанию выключено), добавить тесты.
3. Тестирование на android. Можно сделать в QEMU виртуальную машину с ARM процессором. 3. Тестирование на android. Можно сделать в QEMU виртуальную машину с ARM процессором.
4. Сравнение по производительности с std::string, профилирование, оптимизация (возможно переписывание узких мест на ассемблере с использованием SIMD инструкций) 4. Сравнение по производительности с std::string, профилирование, оптимизация (возможно переписывание узких мест на ассемблере с использованием SIMD инструкций)
logger
1. Сделать несколько вариантов вывода
2. Сделать возможность отключения логов (что-то типа вывода в /dev/null, оверхед от логов в таком режиме должен быть минимален)