ALib C++ Framework
by
Library Version: 2605 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
basecamp.cpp
3
4using namespace alib::strings;
5
6namespace alib::camp {
7#if !DOXYGEN
8namespace {
9void bulkloadResources(ResourcePool& resourcePool, const NCString& resourceCategory) {
10 resourcePool.BootstrapBulk( resourceCategory,
11
12 // ALIB-RESOURCE-COMPILER-REPLACEMENT-START
13 "Alignment" , A_CHAR("0,Left,1,1,Right,1,2,Center,1"),
14 "Bool" , A_CHAR("0,False,1,1,True,1,0,0,1,1,1,1,0,No,1,1,Yes,1,0,Off,2,1,On,2,0,-,1,1,Ok,2"),
15 "Caching" , A_CHAR("0,Disabled,1,1,Enabled,1,1,Auto,1"),
16 "Case" , A_CHAR("0,Sensitive,1,1,Ignore,1"),
17 "ContainerOp" , A_CHAR("0,Insert,1,1,Remove,1,3,GetCreate,4,2,Get,1,4,Create,1"),
18 "CurrentData" , A_CHAR("0,Keep,1,1,Clear,1"),
19 "Inclusion" , A_CHAR("0,Include,1,1,Exclude,1"),
20 "Initialization" , A_CHAR("0,Suppress,1,1,Default,1,2,Nulled,1,0,None,2,1,Initialize,1,2,Zero,1"),
21 "LineFeeds" , A_CHAR("0,None,1,0,Ignore,1,1,Unix,1,2,WindowsOS,1,3,Platform,1"),
22 "Phase" , A_CHAR("0,Begin,1,1,End,1"),
23 "Propagation" , A_CHAR("0,Omit,1,1,ToDescendants,1"),
24 "Reach" , A_CHAR("0,Global,1,1,Local,1"),
25 "Responsibility" , A_CHAR("0,KeepWithSender,1,1,Transfer,1"),
26 "Safeness" , A_CHAR("0,Safe,1,1,Unsafe,1"),
27 "Side" , A_CHAR("0,Left,1,1,Right,1"),
28 "SortOrder" , A_CHAR("0,Ascending,1,1,Descending,1"),
29 "SourceData" , A_CHAR("0,Copy,1,1,Move,1"),
30 "Switch" , A_CHAR("0,Off,2,1,On,2"),
31 "Timezone" , A_CHAR("0,Local,1,1,Local,1"),
32 "Timing" , A_CHAR("0,Async,1,1,Sync,1,0,Asynchronous,1,1,Synchronous,1,1,Synchronized,1"),
33 "ValueReference" , A_CHAR("0,Absolute,1,1,Relative,1"),
34 "Whitespaces" , A_CHAR("0,Trim,1,1,Keep,1"),
35 "TSts" , A_CHAR("0,Unstarted,1,1,Started,3,2,Running,1,3,Done,3,4,Terminated,1"),
36 "TMDWP" , A_CHAR("0,Lowest,4,500,DeferredDeletion,1,1000,Low,1,2000,Standard,1,4000,Highest,5,3000,High,1"),
37 "VARE<" , A_CHAR("variables::"),
38 "VARE" , A_CHAR("0,OK,,1,ErrorOpeningFile,VARERF,2,ErrorWritingFile,VAREWF"),
39 "VARERF" , A_CHAR("Can't open {}file {!Q'} for reading."),
40 "VAREWF" , A_CHAR("Can't open {}file {!Q'} for writing."),
41 "VarPrio" , A_CHAR("0,NONE,1,1000,AutoDetected,1,2000,DefaultValues,1,4000,Standard,1,6000,ConfigFile,2,8000,Environment,1,10000,SessionFile,8,12000,CLI,2,14000,Session,2,max,Protected,1"),
42 "CFGPlgEnv" , A_CHAR("Environment Variables"),
43 "CFGPlgCLI" , A_CHAR("Command Line Arguments"),
44 "CFGIniWB" , A_CHAR("writeback"),
45 "CFGBTF" , A_CHAR("False I 1,True I 1,0 I 1,1 I 1,No I 1,Yes I 1,Off I 3,On I 2,--- I 1,OK I 2"),
46 "Var0" , A_CHAR("1|ALIB/LOCALE|S"),
47 "Var1" , A_CHAR("2|ALIB/WAIT_FOR_KEY_PRESS|B"),
48 "Var2" , A_CHAR("3|ALIB/HAS_CONSOLE_WINDOW|B"),
49 "Var_C1" , A_CHAR("Defines the locale of the application. If empty or not set, the system's locale is used.\n")
50 A_CHAR("If set, a UTF8 locale should be used, for example, 'us_US.UTF-8' or 'de_DE.UTF-8'"),
51 "Var_C2" , A_CHAR("If true, the process waits for a key stroke on termination. If empty, under Windows\n")
52 A_CHAR("the behavior is detected, under other OSes, it defaults to false."),
53 "Var_C3" , A_CHAR("Boolean value that denotes what its name indicates. If empty, under Windows the value is\n")
54 A_CHAR("detected, under other OSes, it defaults to true."),
55 "CFG_SECT_CMT_ALIB", A_CHAR("@>'/// '@HL-General ALib library settings.\n")
56 A_CHAR("@HL-)"),
57 "EXIT_MSG" , A_CHAR("ALIB: Press 'Enter' to exit..."),
58 "ACAlgos" , A_CHAR("0,NONE,1,31,ALL,1,1,Uncompressed,1,2,MinMax,1,4,Sparse,1,8,VerySparse,1,16,Incremental,1,32,Huffman,1"),
59 "Months" , A_CHAR("January,February,March,April,May,June,July,August,September,October,November,December"),
60 "Days" , A_CHAR("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday"),
61 "DurUnts" , A_CHAR("zero time, days, day, hours, hour, minutes, minute, seconds, second, ms, ms, \u03BCs, \u03BCs, ns, ns"),
62 "FMTDT" , A_CHAR("yyyy-MM-dd HH:mm:ss"),
63 "FMTCI" , A_CHAR("[@ sf:sl from ''ya'' by ''ta'']"),
64 "FMTCINT" , A_CHAR("<None>"),
65 "FMTCINY" , A_CHAR("<None>"),
66 "FMTCINR" , A_CHAR("<Null>"),
67 "SF" , A_CHAR("0,Root,1,1,Current,1,3,HomeConfig,5,2,Home,1,4,Module,1,5,Temp,1,6,VarTemp,1"),
68 "ExcFmtExc" , A_CHAR("\nAn exception occurred while formatting another (!) exception:\n"),
69 "PHT" , A_CHAR("0,NotGiven,1,1,String,1,2,Character,1,3,IntBase10,6,4,IntBinary,6,5,IntOctal,6,6,IntHex,6,7,Float,1,8,Bool,1,9,HashCode,1,10,Fill,4"),
70 "FE<" , A_CHAR("format::"),
71 "FE0" , A_CHAR("11,ArgumentIndexIs0,FMG11"),
72 "FE1" , A_CHAR("12,ArgumentIndexOutOfBounds,FMG12"),
73 "FE2" , A_CHAR("13,IncompatibleTypeCode,FMG13"),
74 "FE3" , A_CHAR("101,MissingClosingBracket,FPS101"),
75 "FE4" , A_CHAR("102,MissingPrecisionValuePS,FPS102"),
76 "FE5" , A_CHAR("103,DuplicateTypeCode,FPS103"),
77 "FE6" , A_CHAR("104,UnknownTypeCode,FPS104"),
78 "FE7" , A_CHAR("105,ExclamationMarkExpected,FPS105"),
79 "FE8" , A_CHAR("106,UnknownConversionPS,FPS106"),
80 "FE9" , A_CHAR("107,PrecisionSpecificationWithInteger,FPS107"),
81 "FE10" , A_CHAR("108,MissingReplacementStrings,FPS108"),
82 "FE11" , A_CHAR("201,NegativeValuesInBracketsNotSupported,FJS101"),
83 "FE12" , A_CHAR("202,MissingPrecisionValueJS,FJS102"),
84 "FE13" , A_CHAR("203,HexadecimalFloatFormatNotSupported,FJS103"),
85 "FE14" , A_CHAR("204,NoAlternateFormOfConversion,FJS104"),
86 "FE15" , A_CHAR("205,NoPrecisionWithConversion,FJS105"),
87 "FE16" , A_CHAR("206,UnknownDateTimeConversionSuffix,FJS106"),
88 "FE17" , A_CHAR("207,UnknownConversionJS,FJS107"),
89 "FE18" , A_CHAR("501,UnknownPropertyInFormatString,PFM501"),
90 "FE19" , A_CHAR("502,ErrorInResultingFormatString,PFM502"),
91 "FE20" , A_CHAR("510,MissingConfigurationVariable,PFM510"),
92 "FE21" , A_CHAR("601,UnknownMarker,ST601"),
93 "FE22" , A_CHAR("602,EndmarkerWithoutStart,ST602"),
94 "FMG11" , A_CHAR("Argument index 0 not allowed.\n")
95 A_CHAR("In: {!Q}\n")
96 A_CHAR(" >{!FillC-}^"),
97 "FMG12" , A_CHAR("Argument index #{} is out of bounds. {} arguments are available.\n")
98 A_CHAR("In: {!Q}\n")
99 A_CHAR(" >{!FillC-}^"),
100 "FMG13" , A_CHAR("Detected placeholder type does not match given argument.\n")
101 A_CHAR("Placeholder number: {}\n")
102 A_CHAR("Placeholder type: {} ({})\n")
103 A_CHAR("Deduced argument type: {!Q}\n")
104 A_CHAR("In: {!Q}\n")
105 A_CHAR(" >{!FillC-}^"),
106 "FPS101" , A_CHAR("Closing bracket '}}' of placeholder not found (or syntax error).\n")
107 A_CHAR("In: {!Q}\n")
108 A_CHAR(" >{!FillC-}^"),
109 "FPS102" , A_CHAR("Missing precision value after '.' character.\n")
110 A_CHAR("In: {!Q}\n")
111 A_CHAR(" >{!FillC-}^"),
112 "FPS103" , A_CHAR("Duplicate type code {!Q'} given (previous was {!Q'}).\n")
113 A_CHAR("In: {!Q}\n")
114 A_CHAR(" >{!FillC-}^"),
115 "FPS104" , A_CHAR("Unknown type code {!Q'} given.\n")
116 A_CHAR("In: {!Q}\n")
117 A_CHAR(" >{!FillC-}^"),
118 "FPS105" , A_CHAR("Expected '!' in continuation of placeholder.\n")
119 A_CHAR("In: {!Q}\n")
120 A_CHAR(" >{!FillC-}^"),
121 "FPS106" , A_CHAR("Unknown conversion \"!{}\".\n")
122 A_CHAR("In: {!Q}\n")
123 A_CHAR(" >{!FillC-}^"),
124 "FPS107" , A_CHAR("Precision not allowed with integer format.\n")
125 A_CHAR("In: {!Q}\n")
126 A_CHAR(" >{!FillC-}^"),
127 "FPS108" , A_CHAR("Missing pair of replacement strings \"<src><repl>\" after \"!Replace\".\n")
128 A_CHAR("In: {!Q}\n")
129 A_CHAR(" >{!FillC-}^"),
130 "FJS101" , A_CHAR("Brackets for negative values not implemented/supported.\n")
131 A_CHAR("In: {!Q}\n")
132 A_CHAR(" >{!FillC-}^"),
133 "FJS102" , A_CHAR("Missing precision value after '.' character.\n")
134 A_CHAR("In: {!Q}\n")
135 A_CHAR(" >{!FillC-}^"),
136 "FJS103" , A_CHAR("Hexadecimal float format not implemented/supported.\n")
137 A_CHAR("In: {!Q}\n")
138 A_CHAR(" >{!FillC-}^"),
139 "FJS104" , A_CHAR("Alternate form '#' not supported with conversion {!Q}.\n")
140 A_CHAR("In: {!Q}\n")
141 A_CHAR(" >{!FillC-}^"),
142 "FJS105" , A_CHAR("Precision specification (.{}) is not supported with conversion {!Q}.\n")
143 A_CHAR("In: {!Q}\n")
144 A_CHAR(" >{!FillC-}^"),
145 "FJS106" , A_CHAR("Unknown date/time conversion suffix {!Q'}.\n")
146 A_CHAR("In: {!Q}\n")
147 A_CHAR(" >{!FillC-}^"),
148 "FJS107" , A_CHAR("Unknown conversion character {!Q'}.\n")
149 A_CHAR("In: {!Q}\n")
150 A_CHAR(" >{!FillC-}^"),
151 "PFM501" , A_CHAR("Unknown property identifier {}{} in format string.\n")
152 A_CHAR("Format string: {!Q}.\n")
153 A_CHAR("Allowed identifiers:"),
154 "PFM502" , A_CHAR("Error in resulting format string.\n")
155 A_CHAR("Source format: {!Q}."),
156 "PFM510" , A_CHAR("Missing or empty configuration variable {!Q} containing user-defined format string."),
157 "ST601" , A_CHAR("Unknown marker at position {}. \n")
158 A_CHAR(" Marked text: {!Q}. \n")
159 A_CHAR(" >{!FillC-}^"),
160 "ST602" , A_CHAR("Found an end-marker without a start marker at position {}. \n")
161 A_CHAR(" Marked text: {!Q}. \n")
162 A_CHAR(" >{!FillC-}^"),
163 "BS" , A_CHAR("0,B,3,1,KiB,3,2,MiB,3,3,GiB,3,4,TiB,3,5,PiB,3,6,EiB,3,7,ZiB,3,8,YiB,3,9,RiB,3,10,QiB,3,11,B,1,12,kB,2,13,MB,2,14,GB,2,15,TB,2,16,PB,2,17,EB,2,18,ZB,2,19,YB,2,20,RB,2,21,QB,2"),
164 // ALIB-RESOURCE-COMPILER-REPLACEMENT-END
165
166 // end of BootstrapBulk()
167 nullptr );
168}
169} // anonymous namespace
170#endif // !DOXYGEN
171
173: Camp( "ALIB" )
174, LocaleFound(nullptr) {
175 #if ALIB_DEBUG && !ALIB_DEBUG_ASSERTION_PRINTABLES
176 ALIB_ASSERT_ERROR( this == &BASECAMP, "BASECAMP",
177 "Instances of class Basecamp must not be created. Use singleton alib::BASECAMP" )
178 #endif
179}
180
183//! @cond NO_DOX
184 #define EOS ,
185//! @endcond
186#if !ALIB_CAMP_OMIT_DEFAULT_RESOURCES
187 // now, we just add the resources that parent App did not define for us.
189 if(!rc.Do( "basecamp.alibrc", __FILE__, *this, ResourceCategory, true,
190 __FILE__ )
191 // nullptr )
192 )
193 bulkloadResources(GetResourcePool(), ResourceCategory);
194#endif // !ALIB_CAMP_OMIT_DEFAULT_RESOURCES
195
196 // CodeMarker_CommonEnums
197 enbs::Bootstrap<alib::lang::Alignment >( *this, "Alignment" );
198 enbs::Bootstrap<alib::lang::Bool >( *this, "Bool" );
199 enbs::Bootstrap<alib::lang::Caching >( *this, "Caching" );
200DOX_MARKER( [DOX_ENUMS_MAKE_PARSABLE_22] )
201 enbs::Bootstrap<alib::lang::Case>( *this, "Case" );
202DOX_MARKER( [DOX_ENUMS_MAKE_PARSABLE_22] )
203 enbs::Bootstrap<alib::lang::ContainerOp >( *this, "ContainerOp" );
206 enbs::Bootstrap<alib::lang::CurrentData >( *this, "CurrentData" );
207 enbs::Bootstrap<alib::lang::Inclusion >( *this, "Inclusion" );
208 enbs::Bootstrap<alib::lang::Initialization >( *this, "Initialization" );
209 enbs::Bootstrap<alib::lang::LineFeeds >( *this, "LineFeeds" );
210 enbs::Bootstrap<alib::lang::Phase >( *this, "Phase" );
211 enbs::Bootstrap<alib::lang::Propagation >( *this, "Propagation" );
212 enbs::Bootstrap<alib::lang::Reach >( *this, "Reach" );
214 enbs::Bootstrap<alib::lang::Responsibility >( *this, "Responsibility" );
215 enbs::Bootstrap<alib::lang::Safeness >( *this, "Safeness" );
216 enbs::Bootstrap<alib::lang::Side >( *this, "Side" );
217 enbs::Bootstrap<alib::lang::SortOrder >( *this, "SortOrder" );
218 enbs::Bootstrap<alib::lang::SourceData >( *this, "SourceData" );
219 enbs::Bootstrap<alib::lang::Switch >( *this, "Switch" );
220 enbs::Bootstrap<alib::lang::Timezone >( *this, "Timezone" );
221 enbs::Bootstrap<alib::lang::Timing >( *this, "Timing" );
222 enbs::Bootstrap<alib::lang::ValueReference >( *this, "ValueReference" );
223 enbs::Bootstrap<alib::lang::Whitespaces >( *this, "Whitespaces" );
224
228
229
232
233
234DOX_MARKER([DOX_VARIABLES_DECLARATION7])
236DOX_MARKER([DOX_VARIABLES_DECLARATION7])
237
238 enbs::Bootstrap<SystemFolders >( *this, "SF" );
242 }
243
245
246 // preload all variable with declarations (and without placeholders)
247 config->PreloadVariables<camp::Variables>();
248 }
249
251 Substring parser;
252 parser= GetResource( "Months" ); for( int i= 0 ; i < 12 ; ++i ) { CalendarDateTime::MONTH_NAMES[i]= parser.ConsumeToken(','); }
253 parser= GetResource( "Days" ); for( int i= 0 ; i < 7 ; ++i ) { CalendarDateTime:: DAY_NAMES[i]= parser.ConsumeToken(','); }
254
255 parser= GetResource( "DurUnts" );
256 for( int i= 0 ; i < int(DayTimeUnits::SIZE_OF_UNITS) ; ++i )
257 DT_UNITS[i]= parser.ConsumeToken(',');
258
259 ALIB_ASSERT( DT_UNITS[size_t(int(DayTimeUnits::SIZE_OF_UNITS)-1)].IsNotEmpty(), "BASECAMP" )
260 ALIB_ASSERT( parser.IsEmpty(), "BASECAMP" )
261
263 format::BYTESIZE_NUMBER_FORMAT->FractionalPartWidth= 1;
264
265 //######################################### set locale #######################################
266 int receivedFrom= 0;
267 String256 locale;
268
269 Variable varLocale(*config, Variables::LOCALE);
270 if ( varLocale.IsDefined()
271 && varLocale.GetString().IsNotEmpty() )
272 {
273 receivedFrom= 1;
274 locale._( varLocale.GetString() );
275 }
276 else if ( EnvironmentVariables::Get( A_CHAR("LANG") ,locale ) ) receivedFrom= 2;
277 else if ( EnvironmentVariables::Get( A_CHAR("LANGUAGE") ,locale ) ) receivedFrom= 3;
278
279 if( receivedFrom > 0 && !locale.Equals<NC,lang::Case::Ignore>( A_CHAR("none") ) ) {
280 ALIB_STRINGS_TO_NARROW( locale, nLocale, 1024)
281 if( !setlocale(LC_ALL, nLocale ) ) {
282 NString256 msg( "ALib Error: setlocale(\""); msg << nLocale <<"\") failed. Setting read from ";
283 msg << ( receivedFrom == 1 ? "config variable 'ALIB_LOCALE'" :
284 receivedFrom == 2 ? "environment variable 'LANG'" :
285 receivedFrom == 3 ? "environment variable 'LANGUAGE'" : "ERROR" );
286
287 std::cerr.write( msg.Buffer(), msg.Length() );
288
289 std::cerr << ". Trying 'setlocale(LC_ALL, \"\")': ";
290 if ( setlocale(LC_ALL, "" ) )
291 std::cerr << " success.";
292 else {
293 std::cerr << "failed. Trying 'setlocale(LC_ALL, \"C\")': ";
294 if ( setlocale(LC_ALL, "C" ) )
295 std::cerr << " success.";
296 else
297 std::cerr << std::endl << " Panic: No standard locale setting was successful!";
298 }
299 std::cerr << std::endl;
300 }
301 else
302 LocaleFound.Allocate( monomem::GLOBAL_ALLOCATOR, locale);
303 }
304
305 // set the system's locale as the default for our static default number format
306 #if ALIB_STRINGS
307 NumberFormat::Global.SetFromLocale();
308 NumberFormat::Global.Flags+= NumberFormatFlags::WriteGroupChars;
309 #endif
310
311
312 // --- determine if we have a console window ---
313 // read configuration
314 Variable varHasConsoleWindow(*config, Variables::HAS_CONSOLE_WINDOW );
315 if ( varHasConsoleWindow.IsDefined() )
316 HasConsoleWindow= varHasConsoleWindow;
317 else {
318 #if defined(_WIN32)
319 // determine if we have a console window
320 HasConsoleWindow= GetConsoleWindow() != NULL;
321 #else
322 HasConsoleWindow= true;
323 #endif
324 (void) varHasConsoleWindow.Define();
325 varHasConsoleWindow= HasConsoleWindow;
326 }
327
328 // --- determine if we want to wait for a keypress upon termination ---
329 Variable varWaitForKeyPress(*config, Variables::WAIT_FOR_KEY_PRESS );
330 if ( varWaitForKeyPress.IsDefined() )
331 WaitForKeyPressOnTermination= varWaitForKeyPress;
332 else {
333 #if defined(_WIN32) && ALIB_DEBUG
336 #else
338 #endif
339 (void) varWaitForKeyPress.Define();
340 varWaitForKeyPress= WaitForKeyPressOnTermination;
341} } }
342
344 if( phase == ShutdownPhases::Announce )
345 return;
346
347 // ShutdownPhases::Destruct:
348 if ( BASECAMP.WaitForKeyPressOnTermination ) {
349 #if defined(_WIN32)
350 OutputDebugStringA( "\r\nALIB: Waiting for 'Enter' key in the console window.\r\n" );
351 #endif
352
353 std::cout << std::endl << GetResource("EXIT_MSG") << std::endl;
354 while ( getchar() != '\n' )
355 ;
356 }
357
358 // alib/lang/message
359 #if ALIB_DEBUG
360 assert::PLUGIN= nullptr;
361 #endif
362}
363
364//##################################################################################################
365// Environment definition/detection
366//##################################################################################################
367
368
369 #if (defined(__unix__) || defined(__APPLE__)) && !DOXYGEN
370namespace { String DebuggerProcessNames= A_CHAR("gdb|debugserver"); }
371 #endif
372
373
375#if defined(__unix__) || defined(__APPLE__)
376
377 // Unix: search debugger process in parent processes
379 uinteger parentPID= pi.PPID;
380 if ( parentPID == 0 )
381 return false;
382
383 ProcessInfo actPI( parentPID );
384 Tokenizer tknzr( DebuggerProcessNames, '|' );
385 while(tknzr.HasNext() ) {
386 Substring& debuggerName= tknzr.Next();
387 if (actPI.Name.StartsWith( debuggerName ) )
388 return true;
389 }
390 return false;
391
392#elif defined(_WIN32)
393
394 return (bool) ( ::IsDebuggerPresent() != 0 ) ;
395
396 #else
397 #pragma message ("Unknown Platform in file: " __FILE__ )
398 return false;
399 #endif
400 }
401
402
403} // namespace [alib::camp]
#define IF_ALIB_THREADS(...)
#define A_CHAR(STR)
#define ALIB_ASSERT(cond, domain)
#define IF_ALIB_BITBUFFER(...)
#define IF_ALIB_THREADMODEL(...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
bool WaitForKeyPressOnTermination
Definition basecamp.hpp:57
virtual void Bootstrap() override
Definition basecamp.cpp:181
virtual void Shutdown(ShutdownPhases phase) override
Definition basecamp.cpp:343
BootstrapPhases GetBootstrapState()
Definition camp.hpp:158
SharedConfiguration config
Definition camp.hpp:96
Camp(const NCString &resourceCategory)
Definition camp.hpp:104
bool Do(const NString &alibrcFileName, const NString &callingFile, Camp &campInstance, const NString &resourceCategory, bool allowReplacements, const NString &cppFileName)
const String & GetResource(const NString &name)
virtual void BootstrapBulk(const nchar *category,...)=0
TAString & _(const TAppendable &src)
constexpr integer Length() const
Definition string.hpp:300
constexpr bool IsEmpty() const
Definition string.hpp:349
constexpr bool IsNotEmpty() const
Definition string.hpp:353
constexpr const TChar * Buffer() const
Definition string.hpp:295
bool Equals(const TString< TChar > &rhs) const
Definition string.hpp:515
bool StartsWith(const TString &needle) const
Definition string.hpp:735
TString< TChar > ConsumeToken(TChar separator=',', lang::Inclusion includeSeparator=lang::Inclusion::Include)
TSubstring< TChar > & Next(lang::Whitespaces trimming=lang::Whitespaces::Trim, TChar newDelim='\0')
Definition tokenizer.cpp:4
uinteger PPID
The parent's process id as AString. (Unix like OS / Mac OS only.).
static const ProcessInfo & Current()
bool Define(Priority requestedPriority=Priority::Standard)
Definition variable.cpp:237
void(* PLUGIN)(const CallerInfo &ci, int type, std::string_view domain, std::string_view msg)
Definition assert.cpp:70
@ HAS_CONSOLE_WINDOW
See #"alibcvALIB_HAS_CONSOLE_WINDOW".
Definition basecamp.hpp:35
@ LOCALE
See #"alibcvALIB_LOCALE".
Definition basecamp.hpp:33
@ WAIT_FOR_KEY_PRESS
See #"alibcvALIB_WAIT_FOR_KEY_PRESS".
Definition basecamp.hpp:34
void Bootstrap(camp::Camp &camp, const NString &name, character innerDelim=',', character outerDelim=',')
Definition camp.hpp:263
NumberFormat * BYTESIZE_NUMBER_FORMAT
TMonoAllocator< lang::HeapAllocator > GLOBAL_ALLOCATOR
Definition alox.cpp:14
strings::TNumberFormat< character > NumberFormat
Type alias in namespace #"%alib".
resources::ResourcePool ResourcePool
Type alias in namespace #"%alib".
strings::TCString< nchar > NCString
Type alias in namespace #"%alib".
Definition cstring.hpp:408
@ Final
The final initialization phase. Here, camps are initializing their custom setup.
Definition camp.hpp:34
variables::Variable Variable
Type alias in namespace #"%alib".
strings::util::TTokenizer< character > Tokenizer
Type alias in namespace #"%alib".
ShutdownPhases
Termination levels usable with #"alib_mod_bs_camps;Bootstrapping ALib Camps".
Definition camp.hpp:40
strings::TString< character > String
Type alias in namespace #"%alib".
Definition string.hpp:2165
system::ProcessInfo ProcessInfo
Type alias in namespace #"%alib".
strings::TSubstring< character > Substring
Type alias in namespace #"%alib".
camp::Basecamp BASECAMP
The singleton instance of ALib Camp class #"Basecamp".
Definition basecamp.cpp:2
NLocalString< 256 > NString256
Type alias name for #"TLocalString;TLocalString<nchar,256>".
LocalString< 256 > String256
Type alias name for #"TLocalString;TLocalString<character,256>".
lang::uinteger uinteger
Type alias in namespace #"%alib".
Definition integers.hpp:152
#define ALIB_STRINGS_TO_NARROW( src, dest, bufSize)
static bool Get(const CString &varName, AString &target, lang::CurrentData targetData=lang::CurrentData::Clear)