ALib C++ Library
Library Version: 2402 R1
Documentation generated by doxygen
Loading...
Searching...
No Matches
alib.cpp
1// #################################################################################################
2// ALib C++ 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 !defined(ALIB_DOX)
10# if !defined(HPP_ALIB_LANG_PLATFORM_INCLUDES) && !defined(ALIB_DOX)
12# endif
13# if ALIB_CAMP && !defined (HPP_ALIB_LANG_BASECAMP)
15# endif
16# if ALIB_SINGLETONS && !defined (HPP_ALIB_SINGLETONS_SINGLETON)
18# endif
19# if ALIB_BOXING && !defined (HPP_ALIB_BOXING_BOXING)
20# include "alib/boxing/boxing.hpp"
21# endif
22# if ALIB_TIME && !defined (HPP_ALIB_TIME_TIME)
23# include "alib/time/time.hpp"
24# endif
25# if ALIB_ENUMS && !defined (HPP_ALIB_ENUMS_RECORDS)
26# include "alib/enums/records.hpp"
27# endif
28
29# if ALIB_ALOX && !defined (HPP_ALIB_ALOXMODULE)
31# endif
32# if ALIB_CONFIGURATION && !defined (HPP_ALIB_CONFIG_CONFIG)
33# include "alib/config/config.hpp"
34# endif
35# if ALIB_CLI && !defined (HPP_ALIB_CLI_CLI)
36# include "alib/cli/cli.hpp"
37# endif
38# if ALIB_EXPRESSIONS && !defined (HPP_ALIB_EXPRESSIONS_EXPRESSIONS)
40# endif
41# if ALIB_FILES && !defined (HPP_ALIB_FILES_CAMP)
43# endif
44
45# if ALIB_CAMP && !defined (HPP_ALIB_LANG_CAMP_BOOTSTRAP)
47# endif
48#endif // !defined(ALIB_DOX)
49
50# include <iostream>
51# include <iomanip>
52
53
54// #################################################################################################
55// Boostrapping & Shutdown
56// #################################################################################################
57namespace alib {
58
59int ArgC = 0;
60const char** ArgVN= nullptr;
61const wchar_t** ArgVW= nullptr;
62
64
66unsigned char Revision = ALIB_REVISION;
68TCompilationFlags CompilationFlags = {ALIB_COMPILATION_FLAGS};
70
71
72void Bootstrap( int alibVersion, int alibRevision, TCompilationFlags compilationFlags )
73{
74 // verify ALib
75 AssertALibVersionAndFlags( alibVersion, alibRevision, compilationFlags );
76
77 #if ALIB_CAMP
78 if(Camps.IsEmpty())
81 #else
83 {
89 }
90 #endif
91 }
92
93
104
106 { { 0, "DEBUG" },
107 { 1, "MONOMEM" },
108 { 2, "SINGLETONS" },
109 { 3, "CHARACTERS" },
110 { 4, "ENUMS" },
111 { 5, "TIME" },
112 { 6, "BOXING" },
113 { 7, "STRINGS" },
114 { 8, "BITBUFFER" },
115 { 9, "THREADS" },
116 { 10, "CAMP" },
117 { 11, "ALOX" },
118 { 12, "CLI" },
119 { 13, "CONFIGURATION" },
120 { 14, "EXPRESSIONS" },
121 { 15, "FILES" },
122 { 16, "FEAT_SINGLETON_MAPPED" },
123 { 17, "CHARACTERS_WIDE" },
124 { 18, "CHARACTERS_WCHAR_IS_4" },
125 { 19, "FEAT_BOXING_BIJECTIVE_INTEGRALS" },
126 { 20, "FEAT_BOXING_BIJECTIVE_CHARACTERS" },
127 { 21, "FEAT_BOXING_BIJECTIVE_FLOATS" },
128 { 22, "DEBUG_BOXING" },
129 { 23, "DEBUG_STRINGS" },
130 { 24, "DEBUG_MONOMEM" },
131 { 25, "DEBUG_RESOURCES" },
132 { 26, "DBG_LOG" },
133 { 27, "DBG_LOG_CI" },
134 { 28, "REL_LOG" },
135 { 29, "REL_LOG_CI" },
136 };
137
138
140void AssertALibVersionAndFlags( int alibVersion, int alibRevision, TCompilationFlags compilationFlags )
141{
142 // verify requested ALib version is met
143 if (Version != alibVersion || Revision != alibRevision )
144 {
145 std::cerr << "!!! Error in ALox library compilation: linked against wrong version of ALib" << std::endl;
146 std::cerr << "!!! ALib library version: " << Version << "R" << int(Revision) << std::endl;
147 std::cerr << "!!! ALib requested version: " << alibVersion << "R" << alibRevision << std::endl;
148 std::cerr << "!!! Exiting with exit(-1)" << std::endl;
149 exit(1);
150 }
151
152 // verify the flags
153 if ( compilationFlags.bits[0] == CompilationFlags.bits[0]
154 && compilationFlags.bits[1] == CompilationFlags.bits[1]
155 && compilationFlags.bits[2] == CompilationFlags.bits[2]
156 && compilationFlags.bits[3] == CompilationFlags.bits[3] )
157 return;
158
159 std::cerr << "!!! Error in ALib library compilation: linked library of ALib has "
160 "different compiler symbols set than the using executable (or library)." << std::endl;
161
162 // dump out the flags
163 std::cerr << std::left << std::setw(35) << "Symbol" << '|' << std::setw(5) << " Lib" <<'|' << " Comp. Unit" << std::endl;
164 std::cerr<< std::setw(62) << std::setfill('-') << ' ' << std::endl << std::setfill(' ');
165
166 for( auto& p : CompilationFlagMeanings )
167 {
168 bool libFlag= (CompilationFlags.bits[p.Flag/8] & (1 << (p.Flag % 8))) != 0;
169 bool reqFlag= (compilationFlags.bits[p.Flag/8] & (1 << (p.Flag % 8))) != 0;
170
171 std::cerr << std::setw(35) << p.Name << '|' << std::setw(5) << (libFlag ? " On" : " Off")
172 << "|" << std::setw(5) << (reqFlag ? " On" : " Off")
173 << ( libFlag != reqFlag ? " <-- Mismatch! " : "")
174 << std::endl;
175 }
176
177 // we just quit!
178 std::cerr << "!!! Exiting with exit(-1)" << std::endl;
179 exit(1);
180}
182
183
184} // namespace [alib]
185
186// #################################################################################################
187// Debug functions
188// #################################################################################################
189
190
191
192#if (ALIB_DEBUG && !ALIB_THREADS && ALIB_EXT_LIB_THREADS_AVAILABLE) || defined(ALIB_DOX)
193
194# include <thread>
195
196 namespace alib {
197
198# if !defined(ALIB_DOX)
199 namespace { std::thread::id threadSeen;
200 bool inSingleThreadedCheck= false; }
201# endif
202
203
204 /** ********************************************************************************************
205 * This method stores the first thread that invokes it, and if in the future the method is
206 * visited by a different thread, it asserts.
207 *
208 * In release compilations, this function is inlined and empty and therefore has not necessarily
209 * be removed by preprocessor macro \ref ALIB_DBG or otherwise.
210 *
211 * In debug-compilations, this is not empty, if:
212 * 1. Module \alib_threads is not included in the \alibdist (what disables thread-safeness
213 * throughout the library), and
214 * 2. Compiler symbol \ref ALIB_EXT_LIB_THREADS_AVAILABLE was passed on library compilation,
215 * which allows to use the C++ thread library without causing linker failures.
216 *
217 * If given, this function is called by macros \ref ALIB_LOCK and \ref ALIB_LOCK_WITH, which
218 * otherwise are defined by module \alib_threads_nl. These macros will still be defined
219 * in the absence of that module. This exclamatory approach was made with \alib to motivate to
220 * write code that compiles with or without multi-threading support.
221 *
222 * In addition to the invocation by these "remaining macro stubs", some other prominent
223 * entities, like \alib{lox::Lox}, \alib{lang::format;Formatter} or
224 * \alib{monomem::AcquireGlobalAllocator} invoke this method with acquisition.
225 **********************************************************************************************/
227 {
228 if( inSingleThreadedCheck ) // this would happen when the assertion below is raised (ALib Report)
229 return;
230 inSingleThreadedCheck= true;
231
232 // first time?
233 if( threadSeen == std::thread::id() )
234 {
235 threadSeen= std::this_thread::get_id();
236 inSingleThreadedCheck= false;
237 return;
238 }
239
240 if( threadSeen != std::this_thread::get_id() )
241 {
242 ALIB_ERROR( "THREADS",
243 "A second thread was detected using a single-threaded compilation of "
244 "ALib! (Module 'Threads' not included in the ALib distribution)." )
245 }
246 inSingleThreadedCheck= false;
247 }
248
249 } // namespace [alib]
250
251#endif // !ALIB_THREADS && ALIB_DEBUG && ALIB_EXT_LIB_THREADS_AVAILABLE
252
253
254
255// #################################################################################################
256// Debug functions
257// #################################################################################################
258#if ALIB_DEBUG
259# include <cassert>
260# include <cstring>
261# if defined( _WIN32 ) && !defined(_STRING_)
262# include <string>
263# endif
264
265namespace alib::lang {
266
267
268void (*DBG_SIMPLE_ALIB_MSG_PLUGIN)( const char* file, int line, const char* method,
269 int type, const char* topic, int qtyMsgs, const char** msgs )
270 =nullptr;
271
272
273//! @cond NO_DOX
275void DbgSimpleALibMsg( const char* file, int line, const char* method, int type,
276 const char* topic,
277 const char* msg1, const char* msg2, const char* msg3,
278 const char* msg4, const char* msg5 )
279{
281
282 int qtyMsgs= msg2 != nullptr ? (msg3 != nullptr ? (msg4 != nullptr ? (msg5 != nullptr ? 5 : 4) : 3) : 2) : 1;
283 const char* msgs[5]= { msg1, msg2, msg3, msg4, msg5 };
284
286 {
287 DBG_SIMPLE_ALIB_MSG_PLUGIN( file, line, method, type, topic, qtyMsgs, msgs );
288 return;
289 }
290
291 // internal implementation
292 if( type == 0 ) std::cout << "ALib Error: ";
293 else if( type == 1 ) std::cout << "ALib WARNING: ";
294 else std::cout << "ALib Message(" << type << "): ";
295
296 // With ALox replacing this method (the usual thing), the first string might auto-detected
297 // as an ALox domain name. To keep this consistent wie do a similar effort here
298 // (code is copied from ALoxReportWriter::Report())
299 int msgNo= 0;
300 if(qtyMsgs > 1)
301 {
302 bool illegalCharacterFound= false;
303
304 auto strLen= strlen(msg1);
305 for( size_t idx= 0 ; idx< strLen ; ++idx )
306 {
307 char c= msg1[idx];
308 if (! ( isdigit( c )
309 || ( c >= 'A' && c <= 'Z' )
310 || c == '-'
311 || c == '_'
312 || c == '/'
313 || c == '.'
314 ) )
315 {
316 illegalCharacterFound= true;
317 break;
318 }
319 }
320
321 if(!illegalCharacterFound)
322 {
323 std::cout << msg1 << ": ";
324 msgNo= 1;
325 }
326 }
327
328
329 for ( ; msgNo != qtyMsgs; ++msgNo )
330 std::cout << msgs[msgNo];
331 std::cout << std::endl;
332 std::cout << "At : " << file << ':' << line << ' ' << method << "()" << std::endl;
333
334 assert(type);
335}
336
337void DbgSimpleALibMsg( const char* file, int line, const char* method, int type,
338 const char* topic, const char* msg, int intVal )
339{
340 std::basic_string<char> sIntVal= std::to_string( intVal );
342 {
343 const char* msgs[2]= { msg, sIntVal.c_str() };
344 DBG_SIMPLE_ALIB_MSG_PLUGIN( file, line, method, type, topic, 2, msgs );
345 return;
346 }
347
348 // internal implementation
349 if( type == 0 )
350 std::cout << "Error in '" << topic << "': ";
351 else
352 std::cout << "Warning in '" << topic << "' " << "(type=" << type << "): ";
353 std::cout << msg << sIntVal << std::endl;
354 std::cout << "At : " << file << ':' << line << ' ' << method << "()" << std::endl;
355 assert(type);
356}
357//! @endcond
358}// namespace [alib::lang]
359#endif
360
361// #################################################################################################
362// static assertions for the platform
363// #################################################################################################
364
365#if !defined(HPP_ALIB_LANG_INTEGERS)
366# include "alib/lang/integers.hpp"
367#endif
368#if !defined(_GLIBCXX_TYPE_TRAITS) || !defined(_TYPE_TRAITS_)
369# include <type_traits>
370#endif
371
372
373static_assert( sizeof(alib::integer ) == sizeof(alib::uinteger ), "Error in ALib type definitions" );
374static_assert( sizeof(alib::integer ) == sizeof(std::size_t ), "Error in ALib type definitions" );
375static_assert(std::is_signed< alib::integer>::value == std::is_signed<std::ptrdiff_t >::value, "Error in ALib type definitions" );
376static_assert(std::is_signed< alib::integer>::value != std::is_signed<std::size_t >::value, "Error in ALib type definitions" );
377static_assert(std::is_signed<alib::uinteger>::value == std::is_signed<std::size_t >::value, "Error in ALib type definitions" );
378static_assert(std::is_signed<alib::uinteger>::value != std::is_signed<std::ptrdiff_t >::value, "Error in ALib type definitions" );
379
380
381// #################################################################################################
382// Type De-mangling
383// #################################################################################################
384
385#if ALIB_DEBUG && !defined(ALIB_DOX)
386# if !defined (HPP_ALIB_LANG_DBGTYPEDEMANGLER)
388# endif
389
390# if defined(__GNUC__) || defined(__clang__)
391# include <cxxabi.h>
392# include <cassert>
393# endif
394
395# if !defined(_GLIBCXX_CSTDLIB) && !defined(_CSTDLIB_)
396# include <cstdlib>
397# endif
398
399# if defined(_WIN32) && !defined(_CSTRING_)
400# include <cstring>
401# endif
402
403namespace alib {
404
405 #if defined(__GNUC__) || defined(__clang__)
406
407 lang::DbgTypeDemangler::DbgTypeDemangler( const std::type_info& typeInfo )
408 {
409 int status;
410 name= abi::__cxa_demangle( typeInfo.name(), nullptr, nullptr, &status);
411 assert( status==0 );
412 }
413
415 {
416 if ( name )
417 std::free(static_cast<void*>( const_cast<char*>(name) ) );
418 }
419
420 const char* lang::DbgTypeDemangler::Get()
421 {
422 return name;
423 }
424
425 #else
426 lang::DbgTypeDemangler::DbgTypeDemangler( const type_info& typeInfo )
427 {
428 name= typeInfo.name();
429 if (std::strncmp( name, "class ", 6) == 0)
430 name+= 6;
431 }
432
434 {
435 }
436
437 const char* lang::DbgTypeDemangler::Get()
438 {
439 return name;
440 }
441 #endif
442
443} // namespace [alib}
444#endif // ALIB_DEBUG
445
446// #################################################################################################
447// Namespace documentation alib and alib
448// #################################################################################################
449/**
450 * # 1. Introduction #
451 * This is the root namespace of \alib, a general purpose C++ library. \alib is developed by
452 * A-Worx GmbH, Germany, published under <em>Boost Software License</em>.
453 *
454 * This namespace is almost empty, apart from:
455 * - sub-namespaces of \alibmods_nl,
456 * - the single unique non-module related sub-namespace \ref alib::lang.
457 * - sub-namespace #alib::compatibility, which is not even a real C++ namespace! In fact, it is used
458 * by various modules to place "documentation" of entities that provide compatibility to types of
459 * the standard C++ class library and 3rd-party libraries.
460 * - Functions and types related to \ref alib_manual_bootstrapping "bootstrapping ALib".
461 *
462 * Nevertheless, this namespace is quite bloated with <em>type aliases</em>, which is explained
463 * in the next section.
464 *
465 * \anchor alib_nsalib_type_aliases
466 * # 2. Type Aliases In Namespace alib #
467 * Once a C++ library becomes more complex, their types get split into different
468 * namespaces and sub-namespaces. This is also true for \alib, which is split into various
469 * modules. Consequently, the common need to conveniently address all types, is to
470 * add several using statements to a compilation unit. With \alib this could
471 * for example look like this:
472 *
473 * using namespace alib::threads;
474 * using namespace alib::strings;
475 * using namespace alib::expressions;
476 *
477 * To avoid the need of the right "permutation" of using statements at the top of a users'
478 * compilation unit, \alib "mirrors" all important types into this outer namespace with type definition
479 * statements. For example, at the end of header file \alibheader{expressions/compiler.hpp},
480 * just before closing outer namespace \b alib, the following statement is made:
481 *
482 * /// Type alias in namespace \b alib.
483 * using Compiler= expressions::Compiler;
484 *
485 * With that, a single:
486 *
487 * using namespace alib;
488 *
489 * fits for all \alib types and in most cases, this single using statement is all that is
490 * needed. This approach does not generate conflicts: If for example the using code would have
491 * an own class named "Compiler", it can fall back to the standard schematic, by adding just:
492 *
493 * using namespace alib::threads;
494 * using namespace alib::strings;
495 *
496 * and accessing class Compiler explicitly as <c>alib::expressions::Compiler</c>.
497 *
498 * \note
499 * The reason why this all is possible ist due to (a next great) design decision of C++.
500 * While the \em CODE in the following snippet:
501 *
502 * namespace A { namespace B { CODE } }
503 *
504 * \note
505 * "sees" all types in namespace \c A, with this snippet:
506 *
507 * using namespace A::B;
508 * CODE
509 *
510 * \note
511 * the \e CODE does not "see" types of namespace \c A, but only those of \c B.
512 *
513 * # 3. Domain-Specific Constants and Variables #
514 * Similar to the concept of mirroring important interface classes into this <b>namespace alib</b>
515 * (which is described in the previous paragraph), it is also agreed to place important global
516 * constants here. The impact and benefits are quite the same.<br>
517 * As a sample, see
518 * \alib{DirectorySeparator} or \alib{NewLine}, which appear in this namespace as soon as header
519 * \alibheader{lang/system/directory.hpp}, respectively \ref alib/strings/cstring.hpp is included.
520 *
521 * # 4. Documentation #
522 * The \ref alib_manual provides extensive documentation, including various separated manuals of
523 * \alibmods, tutorials with sample code, information about configuring and compiling the
524 * library and so forth.<br>
525 * For people new to \alib, the \ref alib_manual is the right place to start!
526 *
527 * # Reference Documentation #
528 */
529namespace alib {}
530
531/**
532 * \dir alib
533 * This is the root folder of all source files of \alib.
534 */
535
536/**
537 * \dir alib/alox
538 * This directory contains header files and compilation units of module \alib_alox.
539 */
540
541/**
542 * \dir alib/alox/detail
543 * This directory contains header files and compilation units of module \alib_alox.
544 */
545
546/**
547 * \dir alib/alox/detail/textlogger
548 * This directory contains header files and compilation units of module \alib_alox.
549 */
550
551/**
552 * \dir alib/alox/loggers
553 * This directory contains header files and compilation units of module \alib_alox.
554 */
555
556/**
557 * \dir alib/bitbuffer
558 * This directory contains header files and compilation units of module \alib_bitbuffer.
559 */
560
561/**
562 * \dir alib/bitbuffer/ac_v1
563 * This directory contains detail header files and compilation units of module \alib_bitbuffer.
564 */
565
566/**
567 * \dir alib/boxing
568 * This directory contains header files and compilation units of module \alib_boxing.
569 */
570
571/**
572 * \dir alib/boxing/detail
573 * This directory contains detail header files and compilation units of module \alib_boxing.
574 */
575
576/**
577 * \dir alib/characters
578 * This directory contains header files and compilation units of module \alib_characters.
579 */
580
581/**
582 * \dir alib/cli
583 * This directory contains header files and compilation units of module \alib_cli.
584 */
585
586/**
587 * \dir alib/compatibility
588 * This directory contains optional header files that provide compatibility between
589 * \alib types and concepts and those of the C++ standard library as well as 3rd party libraries.
590 */
591
592/**
593 * \dir alib/config
594 * This directory contains header files and compilation units of module \alib_config.
595 */
596
597
598/**
599 * \dir alib/enums
600 * This directory contains header files and compilation units of module \alib_enums.
601 */
602
603/**
604 * \dir alib/enums/detail
605 * This directory contains detail header files and compilation units of module \alib_enums.
606 */
607
608/**
609 * \dir alib/expressions
610 * This directory contains header files and compilation units of module \alib_expressions.
611 */
612
613/**
614 * \dir alib/expressions/detail
615 * This directory contains detail header files and compilation units of module \alib_expressions.
616 */
617
618/**
619 * \dir alib/expressions/plugins
620 * This directory contains header files and compilation units of module \alib_expressions.
621 */
622
623/**
624 * \dir alib/expressions/util
625 * This directory contains header files and compilation units of module \alib_expressions.
626 */
627
628/**
629 * \dir alib/lang
630 * This directory contains general language extension types, functions and preprocessor code
631 * of \aliblong, which are to be included in any \alibdist, regardless of the selected module subset.
632 */
633
634/**
635 * \dir alib/lang/basecamp
636 * This directory contains header files that define \alibcamps and extended bootstrapping
637 * functionality as well as the compilation units of special \alib module \alib_basecamp.
638 */
639
640/**
641 * \dir alib/lang/system
642 * This directory contains header files and compilation units of module \alib_basecamp.
643 */
644
645/**
646 * \dir alib/lang/resources
647 * This directory contains header files and compilation units of module \alib_basecamp.
648 */
649
650/**
651 * \dir alib/lang/resources/detail
652 * This directory contains detail header files and compilation units of module \alib_basecamp.
653 */
654
655/**
656 * \dir alib/lang/message
657 * This directory contains header files and compilation units of module \alib_basecamp.
658 * As an exclamation to the general rules, the types defined herein are exposed to
659 * namespace \ref alib::lang.
660 */
661
662/**
663 * \dir alib/lang/format
664 * This directory contains header files and compilation units of module \alib_basecamp.
665 */
666
667/**
668 * \dir alib/monomem
669 * This directory contains header files and compilation units of module \alib_monomem.
670 */
671
672/**
673 * \dir alib/monomem/detail
674 * This directory contains detail header files and compilation units of module \alib_monomem.
675 */
676
677/**
678 * \dir alib/monomem/util
679 * This directory contains header files and compilation units of utility types of module \alib_monomem.
680 */
681
682/**
683 * \dir alib/singletons
684 * This directory contains header files and compilation units of module \alib_singletons.
685 */
686
687/**
688 * \dir alib/strings
689 * This directory contains header files and compilation units of module \alib_strings.
690 */
691
692/**
693 * \dir alib/strings/detail
694 * This directory contains detail header files and compilation units of module \alib_strings.
695 */
696
697/**
698 * \dir alib/strings/util
699 * This directory contains header files and compilation units of utility types of module \alib_strings.
700 */
701
702/**
703 * \dir alib/threads
704 * This directory contains header files and compilation units of module \alib_threads.
705 */
706
707/**
708 * \dir alib/threads/detail
709 * This directory contains detail header files and compilation units of module \alib_threads.
710 */
711
712/**
713 * \dir alib/time
714 * This directory contains header files and compilation units of module \alib_time.
715 */
716
ALIB_API const char * Get()
ALIB_API DbgTypeDemangler(const std::type_info &typeInfo)
#define ALIB_IF_TIME(...)
Definition alib.hpp:311
#define ALIB_IF_BOXING(...)
Definition alib.hpp:215
#define ALIB_REVISION
Definition alib.hpp:24
#define ALIB_VERSION
Definition alib.hpp:23
#define ALIB_IF_SINGLETONS(...)
Definition alib.hpp:279
#define ALIB_IF_THREADS(...)
Definition alib.hpp:303
#define ALIB_WARNINGS_RESTORE
Definition alib.hpp:715
#define ALIB_IF_ENUMS(...)
Definition alib.hpp:247
#define ALIB_ERROR(...)
Definition alib.hpp:980
#define ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE
Definition alib.hpp:644
void Bootstrap()
Definition boxing.cpp:732
ALIB_API void Bootstrap()
void(* DBG_SIMPLE_ALIB_MSG_PLUGIN)(const char *file, int line, const char *method, int type, const char *topic, int qtyMsgs, const char **msgs)
Definition alib.cpp:268
ALIB_API void DbgSimpleALibMsg(const char *file, int line, const char *method, int type, const char *topic, const char *msg1=nullptr, const char *msg2=nullptr, const char *msg3=nullptr, const char *msg4=nullptr, const char *msg5=nullptr)
void Bootstrap()
Definition thread.cpp:140
void Shutdown()
Definition thread.cpp:179
void Bootstrap()
Definition time.cpp:50
void Shutdown()
Definition time.cpp:63
Definition alib.cpp:57
@ Destruct
The main phase of termination that destructs everything.
ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE void AssertALibVersionAndFlags(int alibVersion, int alibRevision, TCompilationFlags compilationFlags)
Definition alib.cpp:140
const char ** ArgVN
Definition alib.cpp:60
lang::uinteger uinteger
Type alias in namespace alib.
Definition integers.hpp:289
unsigned char Revision
Definition alib.cpp:66
ALIB_API List< lang::Camp * > Camps
int ArgC
Definition alib.cpp:59
void DbgCheckSingleThreaded()
Definition alib.cpp:226
@ Final
The final initialization phase.
bool NonCampModulesInitialized
Definition alib.cpp:63
ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE TCompilationFlags CompilationFlags
Definition alib.cpp:68
const wchar_t ** ArgVW
Definition alib.cpp:61
void BootstrapAddDefaultCamps()
Definition bootstrap.cpp:83
int Version
Definition alib.cpp:65
ALIB_WARNINGS_RESTORE void Bootstrap(int alibVersion, int alibRevision, TCompilationFlags compilationFlags)
Definition alib.cpp:72
CompilationFlagMeaningsEntry CompilationFlagMeanings[30]
Definition alib.cpp:105
void Shutdown()
Definition alib.cpp:94
lang::integer integer
Type alias in namespace alib.
Definition integers.hpp:286
unsigned char bits[4]
The Flags.
Definition alib.hpp:1063