34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
|
|
/*
|
|||
|
|
* ResourceHolder.cpp
|
|||
|
|
*
|
|||
|
|
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
|||
|
|
* Author: titov
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#include "ResourceHolder.hpp"
|
|||
|
|
|
|||
|
|
systemic::ResourceHolder::ResourceHolder( std::size_t max_size,
|
|||
|
|
std::pmr::memory_resource* record_allocator,
|
|||
|
|
std::pmr::memory_resource* record_guard_allocator,
|
|||
|
|
NotificationInterface & herald )
|
|||
|
|
: size_limit(max_size),
|
|||
|
|
record_allocator(record_allocator),
|
|||
|
|
record_guard_allocator(record_guard_allocator ? record_guard_allocator : record_allocator),
|
|||
|
|
records( std::less< ResourceRecord::Info >(),
|
|||
|
|
std::pmr::polymorphic_allocator< ResourceRecord::Data >(record_allocator) ),
|
|||
|
|
herald(herald) {}
|
|||
|
|
|
|||
|
|
void * systemic::ResourceHolder::getRecord( const std::type_info & obj_type, Id id, Tag tag ) {
|
|||
|
|
|
|||
|
|
ResourceRecord::Info record_info(&obj_type, id, tag);
|
|||
|
|
|
|||
|
|
ResourceRecordMap::iterator iter = records.find(record_info);
|
|||
|
|
|
|||
|
|
if( iter != records.end() )
|
|||
|
|
return iter->second;
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
return nullptr;
|
|||
|
|
|
|||
|
|
}
|