ALib C++ Library
Library Version: 2510 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
variables.cpp
1// #################################################################################################
2// alib::lox::detail - ALox Logging 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;
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&, const StringEscaper& escaper, const String& src)
48{
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, AString& dest)
63{
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&, const StringEscaper& escaper, const String& src)
80{
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, const StringEscaper& escaper, AString& dest)
91{
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&, const StringEscaper& escaper, const String& src)
101{
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, const StringEscaper& escaper, AString& dest)
118{
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&, const StringEscaper& escaper, const String& src)
134{
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, const StringEscaper& escaper, AString& dest)
152{
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&, const StringEscaper& escaper, const String& src)
168{
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, Configuration&, const StringEscaper& escaper, AString& dest)
179{
180 auto& rec= data->As<alib::lox::textlogger::FormatOther>();
181#if ALIB_CHARACTERS_WIDE
182 String256 wNoSourceFileInfo(rec.NoSourceFileInfo);
183 String256 wNoMethodInfo (rec.NoMethodInfo );
184 escaper.Escape(wNoSourceFileInfo , dest, A_CHAR(",")); dest << A_CHAR(", ");
185 escaper.Escape(wNoMethodInfo , dest, A_CHAR(",")); dest << A_CHAR(", ");
186#else
187 escaper.Escape(rec.NoSourceFileInfo , dest, ","); dest << A_CHAR(", ");
188 escaper.Escape(rec.NoMethodInfo , dest, ","); dest << A_CHAR(", ");
189#endif
190 dest << rec.LogNumberMinDigits;
191}
192
193// FormatAutoSizes
194ALIB_DLL void VMeta_FormatAutoSizes::imPort(VDATA* data, Configuration&, const StringEscaper& , const String& src)
195{
196 auto& rec= data->As<alib::lox::textlogger::FormatAutoSizes>();
197
198 Substring importMI(src);
199 Substring importLog;
200 integer sepPos= importMI.IndexOf(';');
201 if( sepPos >= 0 )
202 importMI.Split( sepPos, importLog, 1 );
203 rec.Main .Import( importMI );
204 rec.LogMessage.Import( importLog );
205}
206
207ALIB_DLL void VMeta_FormatAutoSizes::exPort(VDATA* data, Configuration&, const StringEscaper& , AString& dest)
208{
209 auto& rec= data->As<alib::lox::textlogger::FormatAutoSizes>();
210 rec.Main .Export( dest );
211 dest << " ; ";
212 rec.LogMessage.Export( dest );
213}
214
215// Replacements
216ALIB_DLL void VMeta_Replacements::imPort(VDATA* data, Configuration&, const StringEscaper& escaper, const String& src)
217{
218 auto& pairs= data->As<alib::lox::textlogger::Replacements>().Pairs;
220 StringVectorMA results(la);
221 escaper.UnescapeTokens(results, src, A_CHAR("=,"));
222 int cnt= 0;
223 while(true)
224 {
225 String searchString= results.TryGet(cnt );
226 String replaceString= results.TryGet(cnt + 1);
227 if( searchString.IsEmpty() )
228 break;
229
230 pairs.insert( pairs.end(), AStringPA(pairs.get_allocator().GetAllocator()) );
231 pairs.back() << searchString;
232 pairs.insert( pairs.end(), AStringPA(pairs.get_allocator().GetAllocator()) );
233 pairs.back() << replaceString;
234 cnt+= 2;
235 }
236}
237
238ALIB_DLL void VMeta_Replacements::exPort(VDATA* data, Configuration&, const StringEscaper& escaper, AString& dest)
239{
240 auto& pairs= data->As<alib::lox::textlogger::Replacements>().Pairs;
241 for(auto it = pairs.begin() ; it != pairs.end() ; )
242 {
243 escaper.Escape(*it , dest, A_CHAR("=,"));
244 dest << "=";
245 ++it;
246 escaper.Escape(*it , dest, A_CHAR("=,"));
247 dest << ", ";
248 ++it;
249 }
250 dest.DeleteEnd(A_CHAR(", "));
251}
252
253// ColorfulLoggerParameters
254ALIB_DLL void VMeta_ColorfulLoggerParameters::imPort(VDATA* data, Configuration&, const StringEscaper&, const String& src)
255{
256 auto& CLP= data->As<alib::lox::textlogger::ColorfulLoggerParameters>();
257 Substring p= src;
258 p.Trim();
260 {
261 ALIB_WARNING( "ALOX", "Error parsing variable CONSOLE_LIGHT_COLORS value '{}'.", src )
262 }
263}
264
265ALIB_DLL void VMeta_ColorfulLoggerParameters::exPort(VDATA* data, Configuration&, const StringEscaper&, AString& dest)
266{
267 auto& CLP= data->As<alib::lox::textlogger::ColorfulLoggerParameters>();
268 dest << CLP.LCU;
269}
270
271} //namespace [alib::variables::detail]
272#endif //if !DOXYGEN
273
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:844
TSubstring & Trim(const TCString< TChar > &whiteSpaces=CStringConstantsTraits< TChar >::DefaultWhitespaces())
#define ALIB_DLL
Definition alib.inl:496
#define A_CHAR(STR)
#define ALIB_WARNING(domain,...)
Definition alib.inl:1046
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:199
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:644
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:2381
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.