8#if ALIB_DEBUG_RESOURCES
16#if !ALIB_DEBUG_RESOURCES
19 auto it=
data.InsertOrAssign(
detail::Key {category, name}, { resource, 0 } );
21 (*DbgResourceLoadObserver) << (it.second ?
"Adding Resource: " :
"Replacing Resource: " )
23 <<
"/" << name <<
"=" << resource << std::endl;
35 va_start(args, category);
43 "Resource key name contains spaces: {} / {} = val", category, key.
Name, val )
45 "Resource key length > 50: {} / {} = val", category, key.
Name, val )
46 #if ALIB_DEBUG_RESOURCES
48 (*DbgResourceLoadObserver) <<
"Bulk Resource: " << category
49 <<
"/" << key.
Name <<
"=" << val << std::endl;
52 #if ALIB_DEBUG_RESOURCES
53 auto it=
data.Find(key);
55 ALIB_MESSAGE(
"RESOURCES",
"Replacing resource \"{}\" in category \"{}\".\n"
56 " Old value: \"{}\"\n"
58 key.
Name, category, it->second, val )
60 #if !ALIB_DEBUG_RESOURCES
61 data.EmplaceOrAssign( key, val );
63 data.EmplaceOrAssign( key, std::make_pair(val,0) );
74 if( dataIt !=
data.end() ) {
75#if !ALIB_DEBUG_RESOURCES
76 return dataIt.Mapped();
78 dataIt.Mapped().second++;
79 return dataIt.Mapped().first;
83 "Missing resource \"{}\" in category: \"{}\"", name, category )
89#if ALIB_DEBUG_RESOURCES
91std::vector<std::tuple<NString, NString, String, integer>>
94 "ResourcePool::DbgGetList was not overridden by the ResourcePool type set. "
95 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
97 return std::vector<std::tuple<NString, NString, String, integer>>();
100std::vector<std::pair<NString, integer>>
103 "ResourcePool::DbgGetCategories was not overridden by the ResourcePool type set. "
104 "Note that type built-in ALib type LocalResourcePool does provide an implementation." )
106 return std::vector<std::pair<NString, integer>>();
109std::vector<std::tuple<NString, NString, String, integer>>
111 std::vector<std::tuple<NString, NString, String, integer>> result;
113 result.reserve(
size_t(
data.Size() ) );
114 for(
auto& it :
data ) {
122 std::sort( result.begin(), result.end(),
123 [] (
const std::tuple<NString, NString, String, integer>& a,
124 const std::tuple<NString, NString, String, integer>& b )
127 auto comp= std::get<0>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<0>(b) );
131 return std::get<1>(a).template CompareTo<CHK, lang::Case::Ignore>( std::get<1>(b) ) < 0;
137std::vector<std::pair<NString, integer>>
139 std::vector<std::pair<NString, integer>> result;
143 for(
auto& entry : list ) {
144 if( !lastCat.
Equals( std::get<0>(entry) ) ) {
145 lastCat= std::get<0>(entry);
146 result.push_back( { std::get<0>(entry), 0 } );
148 ++result.back().second;
#define ALIB_MESSAGE(domain,...)
#define ALIB_WARNING(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.