8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Configuration MACRO 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);
82 "Resource key name contains spaces: {} / {} = val", category, key.
Name, val )
84 "Resource key length > 50: {} / {} = val", category, key.
Name, val )
85 #if ALIB_DEBUG_RESOURCES
87 (*DbgResourceLoadObserver) <<
"Bulk Resource: " << category
88 <<
"/" << key.
Name <<
"=" << val << std::endl;
92 auto it=
data.Find(key);
94 ALIB_ERROR(
"RESOURCES",
"Replacing resource \"{}\" in category \"{}\".\n"
95 " Old value: \"{}\"\n"
97 key.
Name, category, it->second, val )
99 #if !ALIB_DEBUG_RESOURCES
100 data.EmplaceOrAssign( key, val );
102 data.EmplaceOrAssign( key, std::make_pair(val,0) );
113 if( dataIt !=
data.end() ) {
114#if !ALIB_DEBUG_RESOURCES
115 return dataIt.Mapped();
117 dataIt.Mapped().second++;
118 return dataIt.Mapped().first;
122 "Missing resource \"{}\" in category: \"{}\"", name, category )
128#if ALIB_DEBUG_RESOURCES
130std::vector<std::tuple<NString, NString, String, integer>>
134 "ResourcePool::DbgGetList was not overridden by the ResourcePool type set. "
135 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
137 return std::vector<std::tuple<NString, NString, String, integer>>();
140std::vector<std::pair<NString, integer>>
144 "ResourcePool::DbgGetCategories was not overridden by the ResourcePool type set. "
145 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
147 return std::vector<std::pair<NString, integer>>();
150std::vector<std::tuple<NString, NString, String, integer>>
153 std::vector<std::tuple<NString, NString, String, integer>> result;
155 result.reserve(
size_t(
data.Size() ) );
156 for(
auto& it :
data )
165 std::sort( result.begin(), result.end(),
166 [] (
const std::tuple<NString, NString, String, integer>& a,
167 const std::tuple<NString, NString, String, integer>& b )
170 auto comp= std::get<0>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<0>(b) );
174 return std::get<1>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<1>(b) ) < 0;
180std::vector<std::pair<NString, integer>>
183 std::vector<std::pair<NString, integer>> result;
187 for(
auto& entry : list )
189 if( !lastCat.
Equals( std::get<0>(entry) ) )
191 lastCat= std::get<0>(entry);
192 result.push_back( { std::get<0>(entry), 0 } );
194 ++result.back().second;
#define ALIB_WARNING(domain,...)
#define ALIB_ERROR(domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
virtual const String & Get(const NString &category, const NString &name, bool dbgAssert) override
virtual std::vector< std::tuple< NString, NString, String, integer > > DbgGetList() override
virtual void BootstrapBulk(const nchar *category,...) override
detail::StaticResourceMap data
A hash map used to store static resources.
virtual bool BootstrapAddOrReplace(const NString &category, const NString &name, const String &data) override
static std::ostream * DbgResourceLoadObserver
virtual std::vector< std::pair< NString, integer > > DbgGetCategories() override
virtual std::vector< std::pair< NString, integer > > DbgGetCategories()
virtual std::vector< std::tuple< NString, NString, String, integer > > DbgGetList()
integer IndexOf(TChar needle, integer startIdx=0) const
bool Equals(const TString< TChar > &rhs) const
constexpr bool IsNull() const
strings::TString< nchar > NString
Type alias in namespace alib.
constexpr String NULL_STRING
A nulled string of the default character type.
strings::TString< character > String
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.
Key type for hashing resource values.
NString Name
The resource name.