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
23 module ALib.Resources;
28#if ALIB_DEBUG_RESOURCES
34#if ALIB_DEBUG_RESOURCES
47#if ALIB_DEBUG_RESOURCES
55#if !ALIB_DEBUG_RESOURCES
58 auto it=
data.InsertOrAssign(
detail::Key {category, name}, { resource, 0 } );
60 (*DbgResourceLoadObserver) << (it.second ?
"Adding Resource: " :
"Replacing Resource: " )
62 <<
"/" << name <<
"=" << resource << std::endl;
74 va_start(args, category);
77 if( key.Name.IsNull() )
81#if ALIB_DEBUG_RESOURCES
83 (*DbgResourceLoadObserver) <<
"Bulk Resource: " << category
84 <<
"/" << key.Name <<
"=" << val << std::endl;
88#if !ALIB_DEBUG_RESOURCES
89 data.EmplaceOrAssign( key, val );
91 data.EmplaceOrAssign( key, std::make_pair(val,0) );
95 "Replacing resource with BootstrapBulk: {} / {} = val",
96 category, key.Name, val )
109 if( dataIt !=
data.end() ) {
110#if !ALIB_DEBUG_RESOURCES
111 return dataIt.Mapped();
113 dataIt.Mapped().second++;
114 return dataIt.Mapped().first;
118 "Unknown resource! Category: \"{}\", Name: \"{}\".", category, name )
124#if ALIB_DEBUG_RESOURCES
126std::vector<std::tuple<NString, NString, String, integer>>
130 "ResourcePool::DbgGetList was not overridden by the ResourcePool type set. "
131 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
133 return std::vector<std::tuple<NString, NString, String, integer>>();
136std::vector<std::pair<NString, integer>>
140 "ResourcePool::DbgGetCategories was not overridden by the ResourcePool type set. "
141 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
143 return std::vector<std::pair<NString, integer>>();
146std::vector<std::tuple<NString, NString, String, integer>>
149 std::vector<std::tuple<NString, NString, String, integer>> result;
151 result.reserve(
size_t(
data.Size() ) );
152 for(
auto& it :
data )
161 std::sort( result.begin(), result.end(),
162 [] (
const std::tuple<NString, NString, String, integer>& a,
163 const std::tuple<NString, NString, String, integer>& b )
166 auto comp= std::get<0>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<0>(b) );
170 return std::get<1>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<1>(b) ) < 0;
176std::vector<std::pair<NString, integer>>
179 std::vector<std::pair<NString, integer>> result;
183 for(
auto& entry : list )
185 if( !lastCat.
Equals( std::get<0>(entry) ) )
187 lastCat= std::get<0>(entry);
188 result.push_back( { std::get<0>(entry), 0 } );
190 ++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.