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"
17#if ALIB_DEBUG_RESOURCES
28#if ALIB_DEBUG_RESOURCES
34#if ALIB_DEBUG_RESOURCES
47#if ALIB_DEBUG_RESOURCES
56#if !ALIB_DEBUG_RESOURCES
59 auto it=
data.InsertOrAssign(
detail::Key {category, name}, { resource, 0 } );
62 (*DbgResourceLoadObserver) << (it.second ?
"Adding Resource: " :
"Replacing Resource: " )
64 <<
"/" << name <<
"=" << resource << std::endl;
77 va_start(args, category);
81 if( key.Name.IsNull() )
85#if ALIB_DEBUG_RESOURCES
87 (*DbgResourceLoadObserver) <<
"Bulk Resource: " << category
88 <<
"/" << key.Name <<
"=" << val << std::endl;
92#if !ALIB_DEBUG_RESOURCES
93 data.EmplaceOrAssign( key, val );
95 data.EmplaceOrAssign( key, std::make_pair(val,0) );
99 "Replacing resource with BootstrapBulk: {} / {} = val",
100 category, key.Name, val )
113 if( dataIt !=
data.end() )
115#if !ALIB_DEBUG_RESOURCES
116 return dataIt.Mapped();
118 dataIt.Mapped().second++;
119 return dataIt.Mapped().first;
123 "Unknown resource! Category: \"{}\", Name: \"{}\".", category, name )
129#if ALIB_DEBUG_RESOURCES
131std::vector<std::tuple<NString, NString, String, integer>>
135 "ResourcePool::DbgGetList was not overridden by the ResourcePool type set. "
136 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
138 return std::vector<std::tuple<NString, NString, String, integer>>();
141std::vector<std::pair<NString, integer>>
145 "ResourcePool::DbgGetCategories was not overridden by the ResourcePool type set. "
146 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
148 return std::vector<std::pair<NString, integer>>();
151std::vector<std::tuple<NString, NString, String, integer>>
154 std::vector<std::tuple<NString, NString, String, integer>> result;
156 result.reserve(
size_t(
data.Size() ) );
157 for(
auto& it :
data )
166 std::sort( result.begin(), result.end(),
167 [] (
const std::tuple<NString, NString, String, integer>& a,
168 const std::tuple<NString, NString, String, integer>& b )
171 auto comp= std::get<0>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<0>(b) );
175 return std::get<1>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<1>(b) ) < 0;
181std::vector<std::pair<NString, integer>>
184 std::vector<std::pair<NString, integer>> result;
188 for(
auto& entry : list )
190 if( !lastCat.
Equals( std::get<0>(entry) ) )
192 lastCat= std::get<0>(entry);
193 result.push_back( { std::get<0>(entry), 0 } );
195 ++result.back().second;
virtual ALIB_DLL const String & Get(const NString &category, const NString &name, bool dbgAssert) override
virtual ALIB_DLL std::vector< std::tuple< NString, NString, String, integer > > DbgGetList() override
virtual ALIB_DLL void BootstrapBulk(const nchar *category,...) override
detail::StaticResourceMap data
A hash map used to store static resources.
virtual ALIB_DLL bool BootstrapAddOrReplace(const NString &category, const NString &name, const String &data) override
static std::ostream * DbgResourceLoadObserver
virtual ALIB_DLL std::vector< std::pair< NString, integer > > DbgGetCategories() override
virtual ALIB_DLL std::vector< std::pair< NString, integer > > DbgGetCategories()
virtual ALIB_DLL std::vector< std::tuple< NString, NString, String, integer > > DbgGetList()
bool Equals(const TString< TChar > &rhs) const
#define ALIB_WARNING(domain,...)
#define ALIB_ASSERT_WARNING(cond, domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
constexpr String NULL_STRING
A nulled string of the default character type.
strings::TString< nchar > NString
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
strings::TString< character > String
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.
Key type for hashing resource values.