ALib C++ Library
Library Version: 2511 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
variables.cpp
1//##################################################################################################
2// ALib C++ Library
3//
4// Copyright 2013-2025 A-Worx GmbH, Germany
5// Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6//##################################################################################################
7#include "alib_precompile.hpp"
8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Symbol ALIB_C20_MODULES has to be given to the compiler as either 0 or 1"
10#endif
11#if ALIB_C20_MODULES
12 module;
13#endif
14//========================================= Global Fragment ========================================
16#include "ALib.Strings.Vector.H"
17
18//============================================== Module ============================================
19#if ALIB_C20_MODULES
20 module ALib.ALox.Impl;
21 import ALib.Lang;
22 import ALib.Strings;
23 import ALib.Boxing;
24 import ALib.EnumRecords;
25 import ALib.EnumRecords.Bootstrap;
26 import ALib.Variables;
27 import ALib.Camp;
28 import ALib.Camp.Base;
29#else
30# include "ALib.Lang.H"
31# include "ALib.Strings.H"
32# include "ALib.Boxing.H"
34# include "ALib.Variables.H"
35# include "ALib.Camp.H"
36# include "ALib.Camp.Base.H"
37# include "ALib.ALox.H"
38# include "ALib.ALox.Impl.H"
39#endif
40//========================================== Implementation ========================================
41#if !DOXYGEN
42
43// FormatMetaInfo
44DOX_MARKER([DOX_VARIABLES_DEFINETYPE2])
46
47void VMeta_FormatMetaInfo::imPort( VDATA* data, Configuration&,
48 const StringEscaper& escaper, const String& src ) {
49 auto& rec = data->As<alib::lox::textlogger::FormatMetaInfo>();
51 StringVectorMA results(la);
52 escaper.UnescapeTokens(results, src, A_CHAR(",") );
53
54 rec.Format .Reset(results.TryGet(0));
55 rec.VerbosityError .Reset(results.TryGet(1));
56 rec.VerbosityWarning.Reset(results.TryGet(2));
57 rec.VerbosityInfo .Reset(results.TryGet(3));
58 rec.VerbosityVerbose.Reset(results.TryGet(4));
59 rec.MsgSuffix .Reset(results.TryGet(5));
60}
61
62void VMeta_FormatMetaInfo::exPort( VDATA* data, Configuration&, const StringEscaper& escaper,
63 AString& dest ) {
64 auto& rec= data->As<alib::lox::textlogger::FormatMetaInfo>();
65 escaper.Escape(rec.Format , dest, A_CHAR(",")); dest <<", " << NEW_LINE;
66 escaper.Escape(rec.VerbosityError , dest, A_CHAR(",")); dest <<", " << NEW_LINE;
67 escaper.Escape(rec.VerbosityWarning , dest, A_CHAR(",")); dest <<", " << NEW_LINE;
68 escaper.Escape(rec.VerbosityInfo , dest, A_CHAR(",")); dest <<", " << NEW_LINE;
69 escaper.Escape(rec.VerbosityVerbose , dest, A_CHAR(",")); dest <<", " << NEW_LINE;
70 escaper.Escape(rec.MsgSuffix , dest, A_CHAR(","));
71}
72
73} // namespace [alib::variables::detail]
74DOX_MARKER([DOX_VARIABLES_DEFINETYPE2])
75
77
78// FormatDate
79ALIB_DLL void VMeta_FormatDateTime::imPort(VDATA* data , Configuration&,
80 const StringEscaper& escaper, const String& src) {
81 auto& rec= data->As<alib::lox::textlogger::FormatDateTime>();
83 StringVectorMA results(la);
84 escaper.UnescapeTokens(results, src, A_CHAR(","));
85
86 rec.Date .Reset(results.TryGet(0));
87 rec.TimeOfDay .Reset(results.TryGet(1));
88 rec.ElapsedDays.Reset(results.TryGet(2));
89}
90ALIB_DLL void VMeta_FormatDateTime::exPort( VDATA* data , Configuration& cfg,
91 const StringEscaper& escaper, AString& dest ) {
92 (void)cfg;
93 auto& rec= data->As<alib::lox::textlogger::FormatDateTime>();
94 escaper.Escape(rec.Date , dest, A_CHAR(",")); dest << A_CHAR(", ");
95 escaper.Escape(rec.TimeOfDay , dest, A_CHAR(",")); dest << A_CHAR(", ");
96 escaper.Escape(rec.ElapsedDays , dest, A_CHAR(","));
97}
98
99// FormatTimeDiff
100ALIB_DLL void VMeta_FormatTimeDiff::imPort(VDATA* data , Configuration&,
101 const StringEscaper& escaper, const String& src) {
102 auto& rec= data->As<alib::lox::textlogger::FormatTimeDiff>();
104 StringVectorMA results(la);
105 escaper.UnescapeTokens(results, src, A_CHAR(","));
106
107 rec.Minimum =int64_t(Substring( results.TryGet(0)).ParseDec());
108 rec.None .Reset( results.TryGet(1));
109 rec.Nanos .Reset( results.TryGet(2));
110 rec.Micros .Reset( results.TryGet(3));
111 rec.Millis .Reset( results.TryGet(4));
112 rec.Secs .Reset( results.TryGet(5));
113 rec.Mins .Reset( results.TryGet(6));
114 rec.Hours .Reset( results.TryGet(7));
115 rec.Days .Reset( results.TryGet(8));
116}
117ALIB_DLL void VMeta_FormatTimeDiff::exPort( VDATA* data , Configuration& cfg,
118 const StringEscaper& escaper, AString& dest ) {
119 (void)cfg;
120 auto& rec= data->As<alib::lox::textlogger::FormatTimeDiff>();
121 dest << rec.Minimum; dest << A_CHAR(", ");
122 escaper.Escape(rec.None , dest, A_CHAR(",")); dest << A_CHAR(", ");
123 escaper.Escape(rec.Nanos , dest, A_CHAR(",")); dest << A_CHAR(", ");
124 escaper.Escape(rec.Micros , dest, A_CHAR(",")); dest << A_CHAR(", ");
125 escaper.Escape(rec.Millis , dest, A_CHAR(",")); dest << A_CHAR(", ");
126 escaper.Escape(rec.Secs , dest, A_CHAR(",")); dest << A_CHAR(", ");
127 escaper.Escape(rec.Mins , dest, A_CHAR(",")); dest << A_CHAR(", ");
128 escaper.Escape(rec.Hours , dest, A_CHAR(",")); dest << A_CHAR(", ");
129 escaper.Escape(rec.Days , dest, A_CHAR(","));
130}
131
132// FormatMultiLine
133ALIB_DLL void VMeta_FormatMultiLine::imPort( VDATA* data , Configuration&,
134 const StringEscaper& escaper, const String& src) {
135 auto& rec= data->As<alib::lox::textlogger::FormatMultiLine>();
137 StringVectorMA results(la);
138 escaper.UnescapeTokens(results, src, A_CHAR(","));
139 String256 buf;
140
141 rec.Mode =int(Substring( results.TryGet(0) ).ParseDec());
142 rec.Headline .Reset(results.TryGet(1));
143 rec.Prefix .Reset(results.TryGet(2));
144 rec.Suffix .Reset(results.TryGet(3));
145 buf .Reset(results.TryGet(4));
146 if( !buf.StartsWith<CHK, lang::Case::Ignore>(A_CHAR("null")) )
147 rec.Delimiter .Reset(buf);
148 rec.DelimiterReplacement .Reset(results.TryGet(5));
149}
150
151ALIB_DLL void VMeta_FormatMultiLine::exPort( VDATA* data , Configuration& cfg,
152 const StringEscaper& escaper, AString& dest ) {
153 (void)cfg;
154 auto& rec= data->As<alib::lox::textlogger::FormatMultiLine>();
155 dest << rec.Mode ; dest << A_CHAR(", ");
156 escaper.Escape(rec.Headline , dest, A_CHAR(",")); dest << A_CHAR(", ");
157 escaper.Escape(rec.Prefix , dest, A_CHAR(",")); dest << A_CHAR(", ");
158 escaper.Escape(rec.Suffix , dest, A_CHAR(",")); dest << A_CHAR(", ");
159 if( rec.Delimiter.IsNotNull() )
160 escaper.Escape(rec.Delimiter , dest, A_CHAR(",")) << dest << A_CHAR(", ");
161 else
162 dest << "nulled, ";
163 escaper.Escape(rec.DelimiterReplacement , dest, A_CHAR(","));
164}
165
166// FormatOther
167ALIB_DLL void VMeta_FormatOther::imPort( VDATA* data , Configuration&,
168 const StringEscaper& escaper, const String& src) {
169 auto& rec= data->As<alib::lox::textlogger::FormatOther>();
171 StringVectorMA results(la);
172 escaper.UnescapeTokens(results, src, A_CHAR(","));
173
174 rec.NoSourceFileInfo .Reset(results.TryGet(0));
175 rec.NoMethodInfo .Reset(results.TryGet(1));
176 rec.LogNumberMinDigits= int(Substring( results.TryGet(2) ).ParseDec());
177}
178ALIB_DLL void VMeta_FormatOther::exPort( VDATA* data ,
180 const StringEscaper& escaper,
181 AString& dest ) {
182 auto& rec= data->As<alib::lox::textlogger::FormatOther>();
183#if ALIB_CHARACTERS_WIDE
184 String256 wNoSourceFileInfo(rec.NoSourceFileInfo);
185 String256 wNoMethodInfo (rec.NoMethodInfo );
186 escaper.Escape(wNoSourceFileInfo , dest, A_CHAR(",")); dest << A_CHAR(", ");
187 escaper.Escape(wNoMethodInfo , dest, A_CHAR(",")); dest << A_CHAR(", ");
188#else
189 escaper.Escape(rec.NoSourceFileInfo , dest, ","); dest << A_CHAR(", ");
190 escaper.Escape(rec.NoMethodInfo , dest, ","); dest << A_CHAR(", ");
191#endif
192 dest << rec.LogNumberMinDigits;
193}
194
195// FormatAutoSizes
196ALIB_DLL void VMeta_FormatAutoSizes::imPort( VDATA* data , Configuration&,
197 const StringEscaper& , const String& src) {
198 auto& rec= data->As<alib::lox::textlogger::FormatAutoSizes>();
199
200 Substring importMI(src);
201 Substring importLog;
202 integer sepPos= importMI.IndexOf(';');
203 if( sepPos >= 0 )
204 importMI.Split( sepPos, importLog, 1 );
205 rec.Main .Import( importMI );
206 rec.LogMessage.Import( importLog );
207}
208
209ALIB_DLL void VMeta_FormatAutoSizes::exPort( VDATA* data, Configuration&,
210 const StringEscaper& , AString& dest ) {
211 auto& rec= data->As<alib::lox::textlogger::FormatAutoSizes>();
212 rec.Main .Export( dest );
213 dest << " ; ";
214 rec.LogMessage.Export( dest );
215}
216
217// Replacements
218ALIB_DLL void VMeta_Replacements::imPort(VDATA* data , Configuration&,
219 const StringEscaper& escaper, const String& src) {
220 auto& pairs= data->As<alib::lox::textlogger::Replacements>().Pairs;
222 StringVectorMA results(la);
223 escaper.UnescapeTokens(results, src, A_CHAR("=,"));
224 int cnt= 0;
225 while(true) {
226 String searchString= results.TryGet(cnt );
227 String replaceString= results.TryGet(cnt + 1);
228 if( searchString.IsEmpty() )
229 break;
230
231 pairs.insert( pairs.end(), AStringPA(pairs.get_allocator().GetAllocator()) );
232 pairs.back() << searchString;
233 pairs.insert( pairs.end(), AStringPA(pairs.get_allocator().GetAllocator()) );
234 pairs.back() << replaceString;
235 cnt+= 2;
236} }
237
238ALIB_DLL void VMeta_Replacements::exPort( VDATA* data , Configuration&,
239 const StringEscaper& escaper, AString& dest) {
240 auto& pairs= data->As<alib::lox::textlogger::Replacements>().Pairs;
241 for(auto it = pairs.begin() ; it != pairs.end() ; ) {
242 escaper.Escape(*it , dest, A_CHAR("=,"));
243 dest << "=";
244 ++it;
245 escaper.Escape(*it , dest, A_CHAR("=,"));
246 dest << ", ";
247 ++it;
248 }
249 dest.DeleteEnd(A_CHAR(", "));
250}
251
252// ColorfulLoggerParameters
253ALIB_DLL void VMeta_ColorfulLoggerParameters::imPort(VDATA* data, Configuration&,
254 const StringEscaper& , const String& src) {
255 auto& CLP= data->As<alib::lox::textlogger::ColorfulLoggerParameters>();
256 Substring p= src;
257 p.Trim();
259 ALIB_WARNING( "ALOX", "Error parsing variable CONSOLE_LIGHT_COLORS value '{}'.", src )
260} }
261
262ALIB_DLL void VMeta_ColorfulLoggerParameters::exPort(VDATA* data, Configuration&,
263 const StringEscaper& , AString& dest) {
264 auto& CLP= data->As<alib::lox::textlogger::ColorfulLoggerParameters>();
265 dest << CLP.LCU;
266}
267
268} //namespace [alib::variables::detail]
269#endif //if !DOXYGEN
ALIB_DLL uint64_t ParseDec(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
integer IndexOf(TChar needle, integer startIdx=0) const
Definition string.inl:815
TSubstring & Trim(const TCString< TChar > &whiteSpaces=CStringConstantsTraits< TChar >::DefaultWhitespaces())
#define ALIB_DLL
Definition alib.inl:503
#define A_CHAR(STR)
#define ALIB_WARNING(domain,...)
Definition alib.inl:1063
bool Parse(strings::TSubstring< TChar > &input, TEnum &result)
VData< void * > VDATA
Definition vmeta.inl:45
strings::util::StringEscaper StringEscaper
Type alias in namespace alib.
Definition escaper.inl:183
LocalString< 256 > String256
Type alias name for TLocalString<character,256>.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
strings::util::TStringVector< character, MonoAllocator > StringVectorMA
Type alias in namespace alib.
constexpr CString NEW_LINE
A zero-terminated string containing the new-line character sequence.
Definition cstring.inl:616
variables::Configuration Configuration
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
Definition integers.inl:149
strings::TString< character > String
Type alias in namespace alib.
Definition string.inl:2189
strings::TAString< character, PoolAllocator > AStringPA
Type alias in namespace alib.
monomem::TLocalAllocator< 4 > LocalAllocator4K
Type alias in namespace alib. Allocates 4kB of stack memory.
strings::TSubstring< character > Substring
Type alias in namespace alib.