16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-21 12:29:18 +02:00

partial initial refactoring: events, memcells, tracks, models, traction; NOTE: debug mode broken, investigate

This commit is contained in:
tmj-fstate
2017-10-07 01:18:54 +02:00
parent 6e8fbf7362
commit f6272d37f1
32 changed files with 4767 additions and 602 deletions

44
Names.h
View File

@@ -65,3 +65,47 @@ private:
// members:
typemap_map m_maps; // list of object maps of types specified so far
};
template <typename Type_>
class basic_table {
public:
// destructor
~basic_table() {
for( auto *item : m_items ) {
delete item; } }
// methods
// adds provided item to the collection. returns: true if there's no duplicate with the same name, false otherwise
bool
insert( Type_ *Item ) {
m_items.emplace_back( Item );
auto const itemname = Item->name();
if( ( true == itemname.empty() ) || ( itemname == "none" ) ) {
return true;
}
auto const itemhandle { m_items.size() - 1 };
// add item name to the map
auto mapping = m_itemmap.emplace( itemname, itemhandle );
if( true == mapping.second ) {
return true;
}
// cell with this name already exists; update mapping to point to the new one, for backward compatibility
mapping.first->second = itemhandle;
return false; }
// locates item with specified name. returns pointer to the item, or nullptr
Type_ *
find( std::string const &Name ) {
auto lookup = m_itemmap.find( Name );
return (
lookup != m_itemmap.end() ?
m_items[ lookup->second ] :
nullptr ); }
protected:
// types
using type_sequence = std::deque<Type_ *>;
using type_map = std::unordered_map<std::string, std::size_t>;
// members
type_sequence m_items;
type_map m_itemmap;
};