Tomasz Sowa
3c0b59e115
added to Space: long double to Space::Value and methods for converting from/to long double
...
added global methods for converting float/string double/string and long double/string (convert/double.h|cpp):
float to_float(const char * str, const char ** after = nullptr);
float to_float(const wchar_t * str, const wchar_t ** after = nullptr);
double to_double(const char * str, const char ** after = nullptr);
double to_double(const wchar_t * str, const wchar_t ** after = nullptr);
long double to_long_double(const char * str, const char ** after = nullptr);
long double to_long_double(const wchar_t * str, const wchar_t ** after = nullptr);
float to_float(const std::string & str, const char ** after = nullptr);
float to_float(const std::wstring & str, const wchar_t ** after = nullptr);
double to_double(const std::string & str, const char ** after = nullptr);
double to_double(const std::wstring & str, const wchar_t ** after = nullptr);
long double to_long_double(const std::string & str, const char ** after = nullptr);
long double to_long_double(const std::wstring & str, const wchar_t ** after = nullptr);
std::string to_str(float val);
std::wstring to_wstr(float val);
std::string to_str(double val);
std::wstring to_wstr(double val);
std::string to_str(long double val);
std::wstring to_wstr(long double val);
2021-06-23 17:01:43 +02:00
Tomasz Sowa
c1f1dc96df
added Space::serialize_to_string(StreamType & stream) template
2021-06-22 17:52:55 +02:00
Tomasz Sowa
99fbdc1635
in Log::~Log(): removed call to save_log_and_clear()
...
it creates a problem if a buffer is destroyed first:
2021-06-20 18:19:53 +02:00
Tomasz Sowa
4a2a99a77d
removed a comment
2021-06-20 17:39:37 +02:00
Tomasz Sowa
0865c41e48
make depend
2021-06-20 16:47:12 +02:00
Tomasz Sowa
ac407b2362
macro renamed: PT_HAS_MORM -> PT_HAS_MORM_LIBRARY
...
TextStream::to_string(...) is now TextStream::to_str(...)
added: std::string TextStream::to_str() const;
added: std::wstring TextStream::to_wstr() const;
2021-06-20 16:46:08 +02:00
Tomasz Sowa
819c49e638
added class Stream (textstream/stream.h) which acts as a base class for TextStream
...
TextStream is making conversions wide/utf8 now
2021-06-20 14:13:23 +02:00
Tomasz Sowa
865837d911
fixed in Space::find_child_space_const(...) - clang address sanitizer reports stack-use-after-scope
...
we have got a reference to a Space instead of a pointer and a local object was created and returned
==15076==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffffffc7c0 at pc 0x000800a5d1bd bp 0x7fffffffc700 sp 0x7fffffffc6f8
READ of size 4 at 0x7fffffffc7c0 thread T0
#0 0x800a5d1bc in pt::Space::is_object() const /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:778:9
#1 0x800a67046 in pt::Space::get_object_field(wchar_t const*) /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:1519:6
#2 0x800a6761c in pt::Space::get_table(wchar_t const*) /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:1582:18
#3 0x800a694cb in pt::Space::find_child_space_table() /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:1953:9
#4 0x800855718 in Winix::TimeZone::SetTz(pt::Space&) /usr/home/tomek/roboczy/prog/winix/winixd/core/timezone.cpp:316:45
#5 0x80085b3a9 in Winix::TimeZones::ParseZones() /usr/home/tomek/roboczy/prog/winix/winixd/core/timezones.cpp:134:18
#6 0x80085c04b in Winix::TimeZones::ReadTimeZones(wchar_t const*) /usr/home/tomek/roboczy/prog/winix/winixd/core/timezones.cpp:176:3
#7 0x80085c69f in Winix::TimeZones::ReadTimeZones(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&) /usr/home/tomek/roboczy/prog/winix/winixd/core/timezones.cpp:199:9
#8 0x80083c380 in Winix::System::ReadTimeZones() /usr/home/tomek/roboczy/prog/winix/winixd/core/system.cpp:122:13
#9 0x80083ca19 in Winix::System::Init() /usr/home/tomek/roboczy/prog/winix/winixd/core/system.cpp:172:2
#10 0x80069ce41 in Winix::App::Init() /usr/home/tomek/roboczy/prog/winix/winixd/core/app.cpp:355:9
#11 0x2de92e in main /usr/home/tomek/roboczy/prog/winix/winixd/main/main.cpp:206:11
Address 0x7fffffffc7c0 is located in stack of thread T0 at offset 128 in frame
#0 0x800a66f3f in pt::Space::get_object_field(wchar_t const*) /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:1518
This frame has 3 object(s):
[32, 40) 'i' (line 1521)
[64, 88) 'ref.tmp' (line 1521)
[128, 136) 'ref.tmp4' (line 1523) <== Memory access at offset 128 is inside this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-scope /usr/home/tomek/roboczy/prog/pikotools/src/space/space.cpp:778:9 in pt::Space::is_object() const
Shadow bytes around the buggy address:
0x4ffffffff8a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff8b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff8c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff8d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff8e0: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f8 f2 f2 f2
=>0x4ffffffff8f0: f8 f8 f8 f2 f2 f2 f2 f2[f8]f3 f3 f3 00 00 00 00
0x4ffffffff900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff910: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff920: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f8 f2 f2 f2
0x4ffffffff930: f8 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
0x4ffffffff940: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==15076==ABORTING
2021-06-18 18:52:24 +02:00
Tomasz Sowa
6d2503ae0e
make depend
2021-06-16 23:44:21 +02:00
Tomasz Sowa
06e0f13df9
added a comment in textstream.h
2021-06-16 17:44:24 +02:00
Tomasz Sowa
8b0ed5e750
added to TextStream:
...
TextStreamBase & operator<<(unsigned char);
TextStreamBase & operator<<(bool);
TextStreamBase & operator<<(short);
TextStreamBase & operator<<(unsigned short);
TextStreamBase & operator<<(float);
TextStreamBase & operator<<(long double);
2021-06-15 19:54:50 +02:00
Tomasz Sowa
4d70ae9e87
fixed: using size() when serializing strings - this allows to serialize a string which contain a null character
...
fixed: printing null character in space format: \u0000 (before was \0 which is not correct in json)
fixed: in serialize_string_buffer(const char * input_str, ...) a temporary fixed was used when copying input string
added support for surrogate pairs when reading \uHHHH format
added support to parse \u{H...} format (only if parsing Space format)
2021-06-14 13:48:32 +02:00
Tomasz Sowa
49c2b478c0
fixed return value from Space::add_child_space()
2021-05-21 17:32:10 +02:00
Tomasz Sowa
5ce36ea844
changed the way how child_spaces are created in Space class
...
- removed child_spaces and name pointers
- now a table with child spaces is created under "child_spaces" object field
- a name of the child space is stored in "name" field of the child object
added methods for manipulating with child spaces:
TableType * find_child_space_table()
bool child_spaces_empty()
size_t child_spaces_size()
Space * find_child_space(size_t table_index)
Space & add_child_space(const wchar_t * space_name)
Space & add_child_space(const std::wstring & space_name)
std::wstring * find_child_space_name()
std::wstring get_child_space_name()
bool is_child_space_name(const wchar_t * name)
added additional methods:
size_t str_size()
size_t wstr_size()
size_t object_size()
size_t table_size()
2021-05-21 17:13:11 +02:00
Tomasz Sowa
c11aa78335
changed: names of methods in SpaceParser: PascalCase to snake_case
2021-05-21 04:42:55 +02:00
Tomasz Sowa
6e4a0f68b3
removed from SpaceParser: SetDefault(), SkipEmpty(bool skip) and UseEscapeChar(bool escape) methods
2021-05-21 04:28:31 +02:00
Tomasz Sowa
82a21f6d85
removed: SpaceParser::SetSpace(...) methods, now ParseJSON/Space(...) methods take a space as an argument
2021-05-21 01:33:01 +02:00
Tomasz Sowa
abeca010cc
fixed: SpaceParser was using space->set_empty_object() when parsing a space
...
and it cleared all values if not an empty object was provided to the set_space() method
2021-05-21 00:26:19 +02:00
Tomasz Sowa
59d4c9a9c8
changed utf8 functions: PascalCase to snake_case
2021-05-21 00:24:56 +02:00
Tomasz Sowa
b574289054
namespace PT renamed to pt
2021-05-20 16:11:12 +02:00
Tomasz Sowa
6f50626dda
fixed another memory leak in CSVParser::parse() (similar like before)
2021-05-19 22:34:10 +02:00
Tomasz Sowa
f8d24de386
fixed memory leak in CSVParser::parse() - a Space struct was allocated but never freed
2021-05-19 22:31:18 +02:00
Tomasz Sowa
604b47db32
added move semantics to Space class
...
added methods:
Space(Space && space);
Space & operator=(Space && space);
void set(const Space & space);
void set(Space && space);
Space & add(const Space & space);
Space & add(Space && space);
Space & add(const wchar_t * field, const Space & space);
Space & add(const wchar_t * field, Space && space);
Space & add(const std::wstring & field, const Space & space);
Space & add(const std::wstring & field, Space && space);
2021-05-19 22:24:53 +02:00
Tomasz Sowa
430822bad8
make depend
2021-05-19 03:26:57 +02:00
Tomasz Sowa
0ea5497094
added CSVParser - a csv parser
2021-05-19 03:26:46 +02:00
Tomasz Sowa
ae1d25d5f3
removed old not used variable from Space
2021-05-19 03:23:18 +02:00
Tomasz Sowa
e0565813de
removed *.a from .gitignore
2021-05-18 23:58:46 +02:00
Tomasz Sowa
db93586c0e
make depend
2021-05-18 23:58:17 +02:00
Tomasz Sowa
ad4e8078ae
MainSpaceParser class has been renamed to MainOptionsParser
2021-05-18 23:57:58 +02:00
Tomasz Sowa
96e60c526f
moved files: mainspaceparser/mainspaceparser.(h|cpp) -> mainoptions/mainoptionsparser.(h|cpp)
2021-05-18 23:50:42 +02:00
Tomasz Sowa
a5c8833452
added tests for MainSpaceParser
2021-05-18 22:57:26 +02:00
Tomasz Sowa
91300bb245
make depend
2021-05-17 03:21:00 +02:00
Tomasz Sowa
fe82f63efb
changed the way of building in Makefiles
2021-05-17 03:20:51 +02:00
Tomasz Sowa
da6a36a205
start creating tests for MainSpaceParser
2021-05-17 03:19:47 +02:00
Tomasz Sowa
ac691bccb7
updated MainSpaceParser to the new Space format, changed api to snake case
...
now we can:
- parse short options, those beginning with a hypnen '-'
- parse long options, those beginning with two hyphens '--'
- long options can have arguments in two forms:
- either with an equal sign, e.g.: --opion-name=argument
- or with a space, e.g: --option argument
in the latter case we can have more than one argument, e.g: --option argument1 argument2
- parse non-option arguments, those after two hyphens to the end of a string, e.g: -- arg1 arg2
2021-05-17 03:09:21 +02:00
Tomasz Sowa
77d7bb5e64
fixed in Space: set_empty_string(), set_empty_wstring(), set_empty_table() and set_empty_object() didn't clear its object
...
if the same kind of object already existed
2021-05-17 03:08:32 +02:00
Tomasz Sowa
3d6c4e27c0
added .editorconfig file with tab style and tab size information
...
https://editorconfig.org/
2021-05-15 18:34:10 +02:00
Tomasz Sowa
1260b303bc
added ./m to .gitignore
2021-05-10 21:24:37 +02:00
Tomasz Sowa
d3dd74b3d4
added tests/tests to .gitignore
2021-05-10 20:16:54 +02:00
Tomasz Sowa
7bdc4d2fc7
added global Makefile
2021-05-10 20:10:10 +02:00
Tomasz Sowa
ce81670bb6
added 'tests' directory with tests for the pikotools library
...
currently only tests for convert/text functions
2021-05-10 20:08:50 +02:00
Tomasz Sowa
cd9e501f48
make depend
2021-05-10 20:08:19 +02:00
Tomasz Sowa
b3cd4d5f7f
removed definition of CXX and CXXFLAGS from Makefile
2021-05-10 20:07:08 +02:00
Tomasz Sowa
adee7d134f
added macro PT_HAS_MORM in Log class where operator<<(morm::Model & model) is used
2021-05-10 20:05:55 +02:00
Tomasz Sowa
7abe4b340a
changes in convert/text functions
...
- changed function names: PascalCase to snake_case
- templates functions moved to a seperate file (text_private.h)
- as a public api only available functions with char/wchar_t/std::string/std::wstring
- ToLower(...) changed to to_lower_emplace(...), similar ToUpper(...) to to_upper_emplace(...)
- added functions:
std::string to_lower(const std::string & str);
std::string to_upper(const std::string & str);
and with std::wstring too
- functions with postfix 'NoCase' changed to 'nc'
2021-05-10 20:04:12 +02:00
Tomasz Sowa
3984c29fbf
moved all directories to src subdirectory
2021-05-09 20:11:37 +02:00
Tomasz Sowa
127f26884e
make depend
2021-05-08 22:40:06 +02:00
Tomasz Sowa
b055c46ae8
fixed #3 : CompareNoCase incorrectly returned that string1 is greater than string2 for some characters
...
when converting from 'char' to 'int' we should first convert to 'unsigned char' and then to 'int'
2021-05-08 22:37:31 +02:00
Tomasz Sowa
463cec3283
fixed #2 : Procedures for reading an utf8 string incorrectly read some utf-8 characters.
...
Those characters were treated as invalid characters.
UTF8ToInt_FirstOctet incorrectly checked if the first octed is zero (after removing first bits).
This is a case only if the utf-8 character consists of two bytes. For 3 or 4 bytes
the first part can have all bits equal zero.
2021-05-07 15:53:19 +02:00
Tomasz Sowa
96eedd9be9
added support for morm::Model to Log:
...
Log & operator<<(morm::Model & model);
but we need some kind of a macro to allow this
2021-04-30 01:17:47 +02:00