ALib C++ Library
Library Version: 2412 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
aloxcamp.cpp
1// #################################################################################################
2// alib::lox::detail - ALox Logging Library
3//
4// Copyright 2013-2024 A-Worx GmbH, Germany
5// Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6// #################################################################################################
8
9#if !DOXYGEN
10# include "alib/alox/aloxcamp.hpp"
11# include "alib/alox/alox.hpp"
14
23
28 ALIB_COMMA alib::config::Priority>, vt_lox_pair_verby_prio )
29#endif // !DOXYGEN
30
31namespace alib {
32
34
35//==================================================================================================
36/// This is the \b C++ version of <b>%ALox Logging Library</b>, which has been integrated
37/// as one of many modules into the <b>ALib C++ Class Library</b>.<br>
38///
39/// Please check out the \ref alib_mod_alox "documentation of ALib Module ALox" for more
40/// information.
41//==================================================================================================
42namespace lox {
43
44
45
47: Camp( "ALOX" )
48{
49 ALIB_ASSERT_ERROR( this == &ALOX, "ALOX",
50 "Instances of class ALox must not be created. Use singleton alib::ALOX" )
51}
52
53// #################################################################################################
54// Compilation Flags
55// #################################################################################################
56
57// check compiler symbols, give warning once (therefore not in HPP)
58#if !ALOX_DBG_LOG && ALOX_DBG_LOG_CI
59# pragma message ( "Warning: ALox compiler symbol mismatch: ALOX_DBG_LOG_CI is true, while ALOX_DBG_LOG is false." )
60#endif
61#if !ALOX_REL_LOG && ALOX_REL_LOG_CI
62# pragma message ( "Warning: ALox compiler symbol mismatch: ALOX_REL_LOG_CI is true, while ALOX_REL_LOG is false" )
63#endif
64
65// #################################################################################################
66// Lox management
67// #################################################################################################
68#if !DOXYGEN
69 namespace
70 {
72 }
73
74#if ALOX_DBG_LOG
75 Lox* theDebugLox = nullptr; // will be created in ALoxCamp::Bootstrap
76#endif
77
78#endif
79
80
81// The lox singletons for debug and release logging
83{
85
86 // search
87 for( auto* it : loxes )
88 if( it->GetName().Equals<CHK, lang::Case::Ignore>( name ) )
89 return it;
90
91
92 // create?
93 if ( create == lang::CreateIfNotExists::Yes )
94 {
95 Lox* newLox= new Lox ( name, false );
96 loxes.EmplaceBack( newLox );
97 return newLox;
98 }
99
100 // not found
101 return nullptr;
102}
103
105{
107
108 // check
109 if ( lox == nullptr )
110 {
111 ALIB_ERROR( "ALOX", "Nullptr given" )
112 return;
113 }
114
115 // remove
116 if( operation == lang::ContainerOp::Remove )
117 {
118 for( auto search= loxes.begin() ; search != loxes.end() ; ++search )
119 if ( *search == lox )
120 {
121 (void) loxes.Erase( search );
122 return;
123 }
124 ALIB_WARNING( "ALOX", "Given lox named {!Q} could not be found for removal.",
125 lox != nullptr ? lox->GetName() : "<null>" )
126 }
127
128 // insert
129 else
130 {
131 for( auto* it : loxes )
132 if( it->GetName().Equals<NC>( lox->GetName() ) )
133 {
134 ALIB_ERROR( "ALOX", "Given lox named {!Q} was already registered. Registration ignored.",
135 lox->GetName() )
136 return;
137 }
138 loxes.EmplaceBack( lox );
139 }
140}
141
142
143// #################################################################################################
144// ALox module initialization
145// #################################################################################################
146
148{
150 {
154 ALIB_BOXING_BOOTSTRAP_VTABLE_DBG_REGISTER( vt_lox_pair_verby_prio )
155
156
157#if !ALIB_RESOURCES_OMIT_DEFAULTS
159
160 "Var0" , A_CHAR( "1|ALOX/NO_IDE_LOGGER|" "B" ) ,
161 "Var1" , A_CHAR( "2|ALOX/CONSOLE_TYPE|" "S" ) ,
162DOX_MARKER([DOX_CONFIG_REPLACEMENTS1])
163"Var2", A_CHAR( "3|ALOX/%2/VERBOSITY_WITH_%1|ALOXV"),
164DOX_MARKER([DOX_CONFIG_REPLACEMENTS1])
165 "Var3" , A_CHAR( "4|ALOX/GLOBAL_SOURCE_PATH_TRIM_RULES|" "S" ) ,
166 "Var4" , A_CHAR( "5|ALOX/%1/SOURCE_PATH_TRIM_RULES|" "S" ) ,
167 "Var5" , A_CHAR( "6|ALOX/%1/DOMAIN_SUBSTITUTION|" "SV;" ) ,
168 "Var6" , A_CHAR( "7|ALOX/%1/PREFIXES|" "S" ) ,
169 "Var7" , A_CHAR( "8|ALOX/%1/DUMP_STATE_ON_EXIT|" "S" ) ,
170 "Var8" , A_CHAR("20|ALOX/%1/AUTO_SIZES|" "ALOXAS" ) ,
171 "Var9" , A_CHAR("21|ALOX/%1/FORMAT|" "ALOXFMI" ) ,
172 "Var10", A_CHAR("22|ALOX/%1/FORMAT_DATE_TIME|" "ALOXFDT" ) ,
173 "Var11", A_CHAR("23|ALOX/%1/FORMAT_MULTILINE|" "ALOXFML" ) ,
174 "Var12", A_CHAR("24|ALOX/%1/FORMAT_TIME_DIFF|" "ALOXFTD" ) ,
175 "Var13", A_CHAR("25|ALOX/%1/FORMAT_OTHER|" "ALOXFO" ) ,
176 "Var14", A_CHAR("26|ALOX/%1/REPLACEMENTS|" "ALOXSR" ) ,
177 "Var15", A_CHAR("27|ALOX/CONSOLE_LIGHT_COLORS|" "ALOXCLP" ) ,
178 "Var16", A_CHAR("28|ALOX/CODEPAGE|" "I" ) ,
179
180 // configuration variable default values
181 "Var_D1", A_CHAR("false"),
182 "Var_D2", A_CHAR("default"),
183 "Var_D8", A_CHAR("none, verbosity=info, domain=/ALOX"),
184
185
186// standard textlogger format string
188 "Var_D21", A_CHAR("%SF:%SL:%A3%SM %A3[%TC +%TL][%tN][%D]%A1#%# %V: ")
189#else
190 "Var_D21", A_CHAR("[%TC +%TL][%tN][%D]%A1#%# %V: ")
191#endif
192 A_CHAR(",[ERR],[WRN], ,[***]") ,
193
194// ANSI textlogger format string
196 "Var_D21A", A_CHAR("%SF:%SL:%A3%SM %A3[%TC +%TL][%tN][%D]%A1#%#: %V")
197#else
198 "Var_D21A", A_CHAR("[%TC +%TL][%tN][%D]%A1#%#:%V")
199#endif
200 A_CHAR( ",\033c0,\033c3,,\033c8,\033[0m" ) ,
201
202 "Var_D22", A_CHAR("yyyy-MM-dd,HH:mm:ss, Days ") ,
203 "Var_D23", A_CHAR("2,ALox: Multi line message follows: ,> ,,nulled,\\r") ,
204
205
206 "Var_D24", A_CHAR("1000" ",--- " ", ns" ", \u00B5s" )
207 A_CHAR(", ms" ", s" ", m" ", h" ", days" ) ,
208
209 "Var_D25", A_CHAR("---, ---, 3"),
210 #if defined(_WIN32)
211 "Var_D28", A_CHAR("65001"),
212 #endif
213
214 // configuration variable comments
215 "Var_C1", A_CHAR("If true, the creation of an additional, ide-specific debug logger is suppressed." "\n"
216 "(In particular suppresses DebugLogger (C#) and VStudioLogger (C++))" ),
217
218 "Var_C2", A_CHAR("Influences the type of console logger to be created by method" "\n"
219 "Lox::CreateConsoleLogger which is also used by Log::AddDebugLogger" "\n"
220 "Possible values are: default, plain, ansi, windows, noqtcreator" ),
221
222 "Var_C3", A_CHAR("The verbosities of logger \"%2\" in lox \"%1\". Supports wildcards for domain paths." "\n"
223 " Format: [ExportAll ;] [[*]domainpath[*] = Verbosity] [;...] " ),
224
225 "Var_C4", A_CHAR("Defines global source path trim rules (applicable for all Lox instances)." "\n"
226 " Format: [ [*]sourcepath [, inclusion, trimoffset, sensitivity, replacement] ] [;...]" ),
227
228 "Var_C5", A_CHAR("Defines source path trim rules for Lox \"%1\". " "\n"
229 " Format: [ [*]sourcepath [, inclusion, trimoffset, sensitivity, replacement] ] [;...]" ),
230
231 "Var_C7", A_CHAR("Prefix strings for log domains of lox \"%1\".\n"
232 " Format: [ [*]domainpath[*] = prefixstring [, inclusion] ] [;...] " ),
233
234 "Var_C8", A_CHAR("Log information about lox \"%1\" on exit. Comma separated list of arguments define" "\n"
235 "verbosity, domain and content of output. Possible values content arguments are:" "\n"
236 " All, " "Basic, " "Version, " "SPTR, " "Loggers, " "Domains, " "InternalDomains" "\n"
237 " ScopeDomains, " "DSR, " "PrefixLogables" "Once, " "LogData, " "ThreadMappings, " "\n"
238 " CompilationFlags." " If NONE is given nothing is dumped." ),
239
240 "Var_C20", A_CHAR("Detected field sizes and tabulator positions of the meta-information portion and the " "\n"
241 "those of the log output, separated by ';'. (These is a generated and temporary values)."),
242
243 "Var_C21", A_CHAR("Meta info format of logger \"%1\", including signatures for verbosity strings and" "\n"
244 "astring added to the end of each log statement." "\n"
245 " Format: MetaInfo,Error,Warning,Info,Verbose,MsgSuffix"),
246
247 "Var_C22", A_CHAR("Date and time format of logger \"%1\"." "\n"
248 " Format: Date,Time,ElapsedDays"),
249
250 "Var_C23", A_CHAR("Multi-line format of logger \"%1\"." "\n"
251 " Format: Mode,Headline,Prefix,Suffix,Delimiter,DelimiterReplacement"),
252
253 "Var_C24", A_CHAR("Time difference entities of logger \"%1\"." "\n"
254 " Format: Minimum,None,Nanos,Micros,Millis,Secs,Mins,Hours, Days"),
255
256 "Var_C25", A_CHAR("Specifies three further format values: 1. A replacement string if no file name is available, \n"
257 "2. A replacement string if no method name is available and 3. The minimum digits of the\n"
258 "log counter." ),
259
260 "Var_C26", A_CHAR("Pairs of search and replacement strings for text logger \"%1\"." "\n"
261 " Format: [search,replacement] [,...]"),
262
263 "Var_C27", A_CHAR("Evaluated by colorful loggers that dispose about light and dark colors. Those may adjust" "\n"
264 "their foreground and background color accordingly. If not given, under Windows OS the right" "\n"
265 "value is detected. Otherwise the value defaults to \"foreground\". In some occasions, the" "\n"
266 "(detected or set) runtime environment might also indicate a different default value." "\n"
267 "Possible values are 'Auto', Foreground', 'Background' and 'Never'."),
268
269 #if defined(_WIN32)
270 "Var_C28", A_CHAR("Code page used by class WindowsConsoleLogger. Defaults to 65001." "\n"
271 "(Only used on Windows OS)" ),
272 #endif
273
274 //###################################### Enums #######################################
275 "Verbosity", A_CHAR("0,Verbose,1,"
276 "1,Info,1,"
277 "2,Warning,1,"
278 "2,Warnings,1," //allow with trailing s when reading
279 "3,Error,1,"
280 "3,Errors,1," //allow with trailing s when reading
281 "4,Off,1" ),
282
283 "Scope", A_CHAR("0,Global,1,"
284 "1,ThreadOuter,7,"
285 "2,Filename,1,"
286 "3,Method,1,"
287 "4,ThreadInner,7,"
288 "5,Path,7" ),
289
290 "StateInfo", A_CHAR("0" "," "NONE" ",1,"
291 "1" "," "Basic" ",1,"
292 "2" "," "Version" ",1,"
293 "^9" "," "LogData" ",4,"
294 "4" "," "Loggers" ",1,"
295 "^6" "," "DSR" ",2,"
296 "8" "," "Domains" ",1,"
297 "^4" "," "InternalDomains" ",1,"
298 "0x100000" "," "SPTR" ",2,"
299 "^5" "," "ScopeDomains" ",1,"
300 "^7" "," "PrefixLogables" ",1,"
301 "^8" "," "Once" ",1,"
302 "^10" "," "ThreadMappings" ",1,"
303 "^21" "," "CompilationFlags" ",1,"
304 "0xFFFFFFFF" "," "All" ",1" ),
305
306 "LCU", A_CHAR( "0,Auto,1,"
307 "1,Never,1,"
308 "2,Foreground,2,"
309 "3,Background,2,"
310 "2,ForeGround,1,"
311 "3,BackGround,1" ),
312
313 //##################################### Various ######################################
314 "VVEA", A_CHAR("ExportAll" ), // Variable VERBOSITIES keyword 'ExportAll'
315 "TLFmtExc", A_CHAR("\nAn exception occurred during formatting ALox logables:\n" ),
316
317 "INI_CMT_ALOX", A_CHAR("@>'/// '@HL-Settings controlling ALox log output.\n@HL-"),
318#if ALIB_DEBUG
319 "INI_CMT_ALOX/LOG", A_CHAR("@>'/// '@HL-Settings of the Lox-instance used with debug-logging.\n@HL-"),
320 "INI_CMT_ALOX/DEBUG_LOGGER", A_CHAR("@>'/// '@HL-Settings of the debug-logger.\n@HL-"),
321#endif
322
323 // end of BootstrapBulk()
324 nullptr );
325#endif // !ALIB_RESOURCES_OMIT_DEFAULTS
326
327 // Add box-functions
331 ALIB_BOXING_BOOTSTRAP_REGISTER_FAPPEND_FOR_APPENDABLE_TYPE_N(std::pair<Verbosity ALIB_COMMA Priority>)
332
333 } // BootstrapPhases::PrepareResources
334
335DOX_MARKER([DOX_CONFIG_DEFINETYPE3])
336//...
337//...
338else if( phase == BootstrapPhases::PrepareConfig )
339{
340 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( FormatMetaInfo )
341 //...
342 //...
343DOX_MARKER([DOX_CONFIG_DEFINETYPE3])
345 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( FormatDateTime )
346 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( FormatTimeDiff )
347 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( FormatMultiLine )
349 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( FormatAutoSizes )
351 ALIB_CONFIG_VARIABLE_REGISTER_TYPE( ColorfulLoggerParameters )
352
353 // Parse enum records
354 EnumRecords<Verbosity >::Bootstrap( *this, "Verbosity" );
355 EnumRecords<Scope >::Bootstrap( *this, "Scope" );
356 EnumRecords<StateInfo >::Bootstrap( *this, "StateInfo" );
357 EnumRecords<textlogger::
358 ColorfulLoggerParameters::
359 LightColorUsage >::Bootstrap( *this, "LCU" );
360
362
363 // preload all variable with declarations (and without placeholders)
365 }
366
367 else if( phase == BootstrapPhases::Final )
368 {
369 #if ALOX_DBG_LOG
370 if ( !theDebugLox )
371 theDebugLox=monomem::GLOBAL_ALLOCATOR().New<Lox>("LOG");
372 #endif
373 }
374}
375
376
378{
379 (void) phase;
380 #if ALOX_DBG_LOG
381 if( phase == ShutdownPhases::Destruct )
382 {
383 if ( Log::DebugLogger != nullptr )
385
386 if ( !theDebugLox )
387 lang::Destruct( *theDebugLox );
388
389 while ( loxes.IsNotEmpty() )
390 detail::LI::Destruct( loxes.Back() );
391 loxes.Reset();
392 }
393 #endif
394}
395
396
398{
399 #if ALOX_DBG_LOG
400 if (Log::DebugLogger != nullptr )
402
403 lang::Destruct(*theDebugLox);
404 #endif
405
406 ALIB_ASSERT_ERROR(loxes.Count() == 0, "ALOX", "A Lox remained from the last test" )
407
408 #if ALOX_DBG_LOG
409 new (theDebugLox) Lox( "LOG" );
410 #endif
411}
412
413void ESC::ReplaceToReadable( AString& target, integer startIdx )
414{
415 while( (startIdx= target.IndexOf( '\033', startIdx ) ) >= 0 )
416 {
417 String32 val("{ESC::");
418 character c= target.CharAt( startIdx + 1 );
419 character c2= target.CharAt( startIdx + 2 );
420
421 const character* code= A_CHAR("ERROR");
422
423 // colors
424 if( c == 'c' || c == 'C' )
425 {
426 if ( c == 'C' )
427 val._<NC>( A_CHAR("BG_") );
428 switch( c2 - '0' )
429 {
430 case 0: code= A_CHAR("RED") ; break;
431 case 1: code= A_CHAR("GREEN") ; break;
432 case 2: code= A_CHAR("YELLOW") ; break;
433 case 3: code= A_CHAR("BLUE") ; break;
434 case 4: code= A_CHAR("MAGENTA") ; break;
435 case 5: code= A_CHAR("CYAN") ; break;
436 case 6: code= A_CHAR("BLACK") ; break;
437 case 7: code= A_CHAR("WHITE") ; break;
438 case 8: code= A_CHAR("GRAY") ; break;
439 case 9: code= A_CHAR("RESET") ; break;
440 default: code= A_CHAR("COL_ERR"); break;
441 }
442
443 }
444
445 // styles
446 else if( c == 's' )
447 {
448 switch( c2 )
449 {
450 case 'B': code= A_CHAR("BOLD") ; break;
451 case 'I': code= A_CHAR("ITALICS") ; break;
452 case 'r': code= A_CHAR("STYLE_RESET") ; break;
453 case 'a': code= A_CHAR("RESET") ; break;
454 default: code= A_CHAR("STYLE_ERR") ; break;
455 }
456 }
457
458 // styles
459 else if( c == 'l' )
460 {
461 switch( c2 )
462 {
463 case 'S': code= A_CHAR("URL_START") ; break;
464 case 'E': code= A_CHAR("URL_END") ; break;
465 default: code= A_CHAR("URL_ERR") ; break;
466 }
467 }
468
469 // others
470 else if( c == 't' && c2 == '0' ) code= A_CHAR("TAB");
471 else if( c == 'A' && c2 == '0' ) code= A_CHAR("EOMETA");
472
473 // Replace
474 val._<NC>(code)._('}');
475 target.ReplaceSubstring<NC>( val, startIdx, 3 );
476 startIdx+= 3;
477 }
478}
479
480}} // namespace [alib::lox]
481
482#if !DOXYGEN
483namespace alib { namespace strings {
484void T_Append<Scope,nchar, lang::HeapAllocator>::operator()( TAString<nchar, lang::HeapAllocator>& target, const lox::Scope src )
485{
486 Scope scope= src;
487 int pathLevel= UnderlyingIntegral( scope - Scope::Path );
488 if(pathLevel > 0 )
489 scope= Scope::Path;
490
491 target << "Scope::" << enums::GetRecord(scope).EnumElementName;
492
493 if( pathLevel > 0 )
494 target << '+' << pathLevel;
495}
496
497void T_Append<std::pair<Verbosity, Priority>,nchar, lang::HeapAllocator>::operator()( TAString<nchar, lang::HeapAllocator>& target, const std::pair<Verbosity, Priority>& src )
498{
499 target._( NFormat::Field( src.first, 7, lang::Alignment::Left) );
500 target._( '(' )._( src.second );
501 target.InsertAt( ")", target.LastIndexOfAny<lang::Inclusion::Exclude>( NDEFAULT_WHITESPACES ) + 1 );
502}
503}}
504
505// CVVerbosities
506namespace alib::config::detail {
507ALIB_API void VMeta_CVVerbosities::imPort(VDATA* data, Configuration&, const StringEscaper& esc, const String& src)
508{
509 auto& cvVerbosities= data->As<alib::lox::CVVerbosities>();
510 auto& exportAllKeyWord= alib::ALOX.GetResource("VVEA");
511 cvVerbosities.ExportAll= false;
512
514 StringVectorMA results(la);
515 esc.UnescapeTokens(results, src, A_CHAR(";"));
516 cvVerbosities.Clear();
517 for( auto it : results )
518 {
519 Substring value= it;
520 value.ConsumeChar('\n');
521 value.ConsumeChar('\r');
522 value.ConsumeCharFromEnd('\n');
523 value.ConsumeCharFromEnd('\r');
524
525 if( value.Equals<CHK, lang::Case::Ignore>(exportAllKeyWord) )
526 {
527 cvVerbosities.ExportAll= true;
528 continue;
529 }
530 cvVerbosities.Add( value );
531 }
532}
533
534ALIB_API void VMeta_CVVerbosities::exPort(VDATA* data, Configuration&, const StringEscaper& esc, AString& dest)
535{
536 auto& cvVerbosities= data->As<alib::lox::CVVerbosities>();
537 auto& exportAllKeyWord= alib::ALOX.GetResource("VVEA");
538 if( cvVerbosities.ExportAll)
539 dest << exportAllKeyWord << " ;" << NEW_LINE;
540
541 if( !cvVerbosities.IsEmpty()) // well, this can only be empty if a user makes mistakes
542 for( auto it= cvVerbosities.begin() ;; )
543 {
544 esc.Escape(*it, dest, A_CHAR(";"));
545
546 if( ++it == cvVerbosities.end() )
547 break;
548
549 dest << " ;";
550 dest << NEW_LINE;
551 }
552}
553} //namespace [alib::config::detail]
554
555#endif // !DOXYGEN
556
NCString ResourceCategory
Definition camp.hpp:119
lang::resources::ResourcePool * resourcePool
Definition camp.hpp:75
config::Configuration * config
Definition camp.hpp:96
const String & GetResource(const NString &name)
virtual void BootstrapBulk(const nchar *category,...)=0
ALIB_API void Reset()
Definition aloxcamp.cpp:397
virtual void bootstrap(BootstrapPhases phase) override
Definition aloxcamp.cpp:147
virtual void shutdown(ShutdownPhases phase) override
Definition aloxcamp.cpp:377
ALIB_API void Register(Lox *lox, lang::ContainerOp operation)
Definition aloxcamp.cpp:104
ALIB_API Lox * Get(const NString &name, lang::CreateIfNotExists create=lang::CreateIfNotExists::No)
Definition aloxcamp.cpp:82
static ALIB_API void ReplaceToReadable(AString &target, integer startIdx)
Definition aloxcamp.cpp:413
static ALIB_API textlogger::TextLogger * DebugLogger
The debug logger created by AddDebugLogger.
Definition log.inl:43
This class acts as a container for Loggers and provides a convenient interface to logging.
Definition lox.inl:58
const NString & GetName()
Definition lox.inl:138
TAString & ReplaceSubstring(const TString< TChar > &src, integer regionStart, integer regionLength)
TAString & _(const TString< TChar > &src, integer regionStart, integer regionLength=MAX_LEN)
integer IndexOf(TChar needle, integer startIdx=0) const
Definition string.hpp:896
TChar CharAt(integer idx) const
Definition string.hpp:444
#define ALIB_WARNING(...)
Definition alib.hpp:1268
#define ALIB_BOXING_VTABLE_DEFINE(TMapped, Identifier)
Definition vtable.inl:473
#define A_CHAR(STR)
#define ALIB_CONFIG_VARIABLE_REGISTER_TYPE(CPPName)
Definition vmeta.hpp:200
#define ALIB_API
Definition alib.hpp:639
#define ALIB_ERROR(...)
Definition alib.hpp:1267
#define ALIB_BOXING_BOOTSTRAP_VTABLE_DBG_REGISTER(Identifier)
Definition vtable.inl:489
#define ALIB_LOCK_RECURSIVE_WITH(lock)
Definition owner.hpp:457
#define ALIB_ASSERT_ERROR(cond,...)
Definition alib.hpp:1271
#define ALIB_BOXING_BOOTSTRAP_REGISTER_FAPPEND_FOR_APPENDABLE_TYPE_N(TAppendable)
#define Log_RemoveDebugLogger()
Definition macros.inl:63
#define ALIB_COMMA
Definition alib.hpp:982
#define ALOX_DBG_LOG_CI
Definition prepro.md:54
#define ALOX_REL_LOG_CI
Definition prepro.md:55
#define ALIB_DEBUG
Definition prepro.md:21
const T_EnumRecords< TEnum >::Type & GetRecord(TEnum element)
static ALIB_FORCE_INLINE void Destruct(T &object)
@ Exclude
Chooses exclusion.
@ Left
Chooses left alignment.
CreateIfNotExists
Denotes whether something should be created if it does not exist.
@ Yes
Create if something does not exist.
ContainerOp
Denotes standard container operations.
@ Remove
Denotes removals.
ALIB_API MonoAllocator GLOBAL_ALLOCATOR
ALIB_API RecursiveLock GLOBAL_ALLOCATOR_LOCK
Definition alib.cpp:69
ShutdownPhases
Termination levels usable with Bootstrapping ALib Camps.
Definition alib.hpp:1418
@ Destruct
The main phase of termination that destructs everything.
lox::ALoxCamp ALOX
The singleton instance of ALib Camp class ALoxCamp.
Definition aloxcamp.cpp:33
config::Configuration Configuration
Type alias in namespace alib.
monomem::TLocalAllocator< 4 > LocalAllocator4K
Type alias in namespace alib. Allocates 4kB of stack memory.
BootstrapPhases
Initialization levels usable with Bootstrapping ALib Camps.
Definition alib.hpp:1393
@ Final
The final initialization phase. Here, camps are initializing their custom setup.
lox::Scope Scope
Type alias in namespace alib.
constexpr NCString NDEFAULT_WHITESPACES
A zero-terminated string of default whitespace characters.
Definition cstring.hpp:609
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
strings::TSubstring< character > Substring
Type alias in namespace alib.
constexpr CString NEW_LINE
A zero-terminated string containing the new-line character sequence.
Definition cstring.hpp:580
ALIB_WARNINGS_RESTORE void Bootstrap(int alibVersion, int alibRevision, TCompilationFlags compilationFlags)
Definition alib.cpp:84
characters::character character
Type alias in namespace alib.
strings::TString< character > String
Type alias in namespace alib.
strings::util::StringEscaper StringEscaper
Type alias in namespace alib.
Definition escaper.hpp:206
lox::Lox Lox
Type alias in namespace alib.
Definition lox.inl:1449
characters::nchar nchar
Type alias in namespace alib.
strings::util::TStringVector< character, MonoAllocator > StringVectorMA
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
Definition integers.hpp:273
See sibling type NC.
Definition alib.hpp:1097
static void Bootstrap(TEnum element, TArgs &&... args) noexcept
static ALIB_API void Destruct(Lox *lox)
Definition loxpimpl.cpp:270
void operator()(TAString< TChar > &target, const TAppendable &src)