ALib C++ Framework
by
Library Version: 2605 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
vmeta.cpp
1
2namespace alib::variables {
3DOX_MARKER([DOX_ENUMS_RECORD_PARSER])
5 enumrecords::bootstrap::EnumRecordParser::Get( ERSerializable::EnumElementName ); // field from parent class
6 ERSerializable::MinimumRecognitionLength= 0; // omit reading, but fix to zero
8}
9DOX_MARKER([DOX_ENUMS_RECORD_PARSER])
10}
11
12#if !DOXYGEN
14
15void VMeta_Bool ::imPort(VDATA* data, Configuration& cfg, const StringEscaper& , const String& src ) { auto result=cfg.ParseBooleanToken(src); data->As<Bool>()= result.first; data->As<Bool>().TokenIndex= result.second; }
16void VMeta_integer ::imPort(VDATA* data, Configuration& cfg, const StringEscaper& , const String& src ) { data->As<integer>()= integer(Substring(src).TrimStart().ParseInt (0, &cfg.NumberFormat)); }
17void VMeta_float ::imPort(VDATA* data, Configuration& cfg, const StringEscaper& , const String& src ) { data->As<double >()= Substring(src).TrimStart().ParseFloat(0, &cfg.NumberFormat) ; }
18void VMeta_String ::imPort(VDATA* data, Configuration& , const StringEscaper& esc, const String& src ) { String2K buf; esc.Unescape(src, buf); data->As<AStringPA>().Reset(buf); }
19
20void VMeta_Bool ::exPort(VDATA* data, Configuration& cfg, const StringEscaper& esc, AString& dest) { String64 buf; esc.Escape(cfg.WriteBooleanToken( data->As<Bool>().Value, data->As<Bool>().TokenIndex, buf ), dest, A_CHAR("\0")); }
21void VMeta_integer ::exPort(VDATA* data, Configuration& , const StringEscaper& , AString& dest) { dest << data->As<integer>(); }
22void VMeta_float ::exPort(VDATA* data, Configuration& , const StringEscaper& , AString& dest) { dest << data->As<double >(); }
23void VMeta_String ::exPort(VDATA* data, Configuration& , const StringEscaper& esc, AString& dest) { esc.Escape(data->As<AStringPA>() , dest, A_CHAR("\0")); }
24void VMeta_Box ::exPort(VDATA* data, Configuration& , const StringEscaper& esc, AString& dest) { esc.Escape(String1K() << data->As<Box>(), dest, A_CHAR("\0")); }
25void VMeta_Box ::imPort(VDATA* data, Configuration& , const StringEscaper& esc, const String& src ) {
26 Substring parser;
27 String2K buf;
28 esc.Unescape(src, buf );
29 parser= buf;
30
31 // try integral
32 {
33 integer val;
34 if(parser.ConsumeInt(val) && parser.Trim().IsEmpty()) {
35 data->As<Box>()= val;
36 return;
37 }
38 parser= src;
39 }
40
41 // try float
42 {
43 double val;
44 if(parser.ConsumeFloat(val) && parser.Trim().IsEmpty()) {
45 data->As<Box>()= val;
46 return;
47 }
48 parser= src;
49 }
50
51 // we just store the source string
52 data->As<Box>()= src;
53}
54
55namespace {
56void imPortStringVector( VDATA* data, const StringEscaper& esc,
57 const String& src , const String& delimiter ) {
59 StringVectorMA results(la);
60 esc.UnescapeTokens(results, src, delimiter);
61 auto& dataSA= data->As<StringVectorPA>();
62 dataSA.clear();
63 for( auto& it : results ) {
64 Substring value= it;
65 value.ConsumeChar('\r');
66 value.ConsumeChar('\n');
67 value.ConsumeCharFromEnd('\n');
68 value.ConsumeCharFromEnd('\r');
69 dataSA.Add( value );
70} }
71
72void exPortStringVector( VDATA* data, const StringEscaper& esc,
73 AString& dest, const String& delimiter ) {
74 auto& dataSA= data->As<StringVectorPA>();
75 if( !dataSA.empty())
76 for( auto it= dataSA.begin() ;; ) {
77 esc.Escape(*it, dest, delimiter);
78
79 if( ++it == dataSA.end() )
80 break;
81
82 dest << delimiter;
83 dest << NEW_LINE;
84} }
85
86}
87void VMeta_StringVectorComma::imPort(VDATA* data, Configuration& , const StringEscaper& esc, const String& src )
88{ imPortStringVector(data, esc, src, A_CHAR(",")); }
89
90void VMeta_StringVectorComma::exPort(VDATA* data, Configuration& , const StringEscaper& esc, AString& dest)
91{ exPortStringVector(data, esc, dest, A_CHAR(",")); }
92
93void VMeta_StringVectorSemicolon::imPort(VDATA* data, Configuration&, const StringEscaper& esc, const String& src )
94{ imPortStringVector(data, esc, src, A_CHAR(";")); }
95
96void VMeta_StringVectorSemicolon::exPort(VDATA* data, Configuration&, const StringEscaper& esc, AString& dest)
97{ exPortStringVector(data, esc, dest,A_CHAR(";")); }
98
99} // namespace [alib::variables]
100#endif // if !DOXYGEN
#define A_CHAR(STR)
double ParseFloat(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
TSubstring & TrimStart(const TCString< TChar > &whiteSpaces=CStringConstantsTraits< TChar >::DefaultWhitespaces())
Definition substring.hpp:69
std::pair< bool, int8_t > ParseBooleanToken(const String &src)
Declaration()=default
Default constructor.
VData< void * > VDATA
Definition vmeta.hpp:53
strings::TAString< character, PoolAllocator > AStringPA
Type alias in namespace #"%alib".
strings::util::TStringVector< character, MonoAllocator > StringVectorMA
Type alias in namespace #"%alib".
Definition vector.hpp:107
LocalString< 64 > String64
Type alias name for #"TLocalString;TLocalString<character,64>".
constexpr CString NEW_LINE
A zero-terminated string containing the new-line character sequence.
Definition cstring.hpp:536
variables::Configuration Configuration
Type alias in namespace #"%alib".
lang::integer integer
Type alias in namespace #"%alib".
Definition integers.hpp:149
boxing::Box Box
Type alias in namespace #"%alib".
Definition box.hpp:1128
strings::util::TStringVector< character, PoolAllocator > StringVectorPA
Type alias in namespace #"%alib".
Definition vector.hpp:110
strings::util::StringEscaper StringEscaper
Type alias in namespace #"%alib".
Definition escaper.hpp:181
strings::TString< character > String
Type alias in namespace #"%alib".
Definition string.hpp:2165
strings::TSubstring< character > Substring
Type alias in namespace #"%alib".
LocalString< 1024 > String1K
Type alias name for #"TLocalString;TLocalString<character,1024>".
LocalString< 2048 > String2K
Type alias name for #"TLocalString;TLocalString<character,2048>".
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace #"%alib".
monomem::TLocalAllocator< 4 > LocalAllocator4K
Type alias in namespace #"%alib". Allocates 4kB of stack memory.
static void Get(String &result, bool isLastField=false)