Added message_router_registry

This commit is contained in:
John Wellbelove 2021-03-05 20:34:14 +00:00
parent 563fc07186
commit 03f6299d63
2 changed files with 61 additions and 12 deletions

View File

@ -115,7 +115,7 @@ namespace etl
{
while (first != last)
{
this->add(*first++);
add(*first++);
}
}
@ -131,7 +131,7 @@ namespace etl
/// Get a pointer to a router that has the specified ID.
/// Returns ETL_NULLPTR if not found.
//********************************************
etl::imessage_router* get_message_router(etl::message_router_id_t id) const
etl::imessage_router* get(etl::message_router_id_t id) const
{
IRegistry::const_iterator itr = registry.find(id);
@ -221,6 +221,8 @@ namespace etl
typedef etl::iflat_map<etl::message_router_id_t, etl::imessage_router*> IRegistry;
//********************************************
// Constructor.
//********************************************
imessage_router_registry(IRegistry& registry_)
: registry(registry_)
@ -248,10 +250,10 @@ namespace etl
{
}
//*************************************************************************
//********************************************
/// Constructor.
/// Constructs from an iterator range.
//*************************************************************************
//********************************************
template <typename TIterator>
message_router_registry(TIterator first, const TIterator& last)
: imessage_router_registry(registry)
@ -278,6 +280,25 @@ namespace etl
}
#endif
//********************************************
// Copy constructor.
//********************************************
message_router_registry(const message_router_registry& rhs)
: imessage_router_registry(registry)
{
registry = rhs.registry;
}
//********************************************
// Assignment operator.
//********************************************
message_router_registry& operator =(const message_router_registry& rhs)
{
registry = rhs.registry;
return *this;
}
private:
typedef etl::flat_map<etl::message_router_id_t, etl::imessage_router*, MaxRouters> Registry;

View File

@ -231,6 +231,34 @@ namespace
CHECK_EQUAL(Registry_Size, registry.max_size());
}
//*************************************************************************
TEST(test_copy_construction)
{
etl::message_router_registry<Registry_Size> registry = { &router1, &router2, &router3, &router4 };
etl::message_router_registry<Registry_Size> registry2(registry);
CHECK(!registry2.empty());
CHECK(registry2.full());
CHECK_EQUAL(Registry_Size, registry2.size());
CHECK_EQUAL(0U, registry2.available());
CHECK_EQUAL(Registry_Size, registry2.max_size());
}
//*************************************************************************
TEST(test_assignment)
{
etl::message_router_registry<Registry_Size> registry = { &router1, &router2, &router3, &router4 };
etl::message_router_registry<Registry_Size> registry2;
registry2 = registry;
CHECK(!registry2.empty());
CHECK(registry2.full());
CHECK_EQUAL(Registry_Size, registry2.size());
CHECK_EQUAL(0U, registry2.available());
CHECK_EQUAL(Registry_Size, registry2.max_size());
}
//*************************************************************************
TEST(test_registery_contains)
{
@ -257,10 +285,10 @@ namespace
{
etl::message_router_registry<Registry_Size> registry = { &router1, &router2, &router3 };
CHECK_EQUAL(&router1, registry.get_message_router(ROUTER1));
CHECK_EQUAL(&router2, registry.get_message_router(ROUTER2));
CHECK_EQUAL(&router3, registry.get_message_router(ROUTER3));
CHECK_EQUAL(nullptr, registry.get_message_router(ROUTER4));
CHECK_EQUAL(&router1, registry.get(ROUTER1));
CHECK_EQUAL(&router2, registry.get(ROUTER2));
CHECK_EQUAL(&router3, registry.get(ROUTER3));
CHECK_EQUAL(nullptr, registry.get(ROUTER4));
}
//*************************************************************************
@ -272,10 +300,10 @@ namespace
CHECK(!registry.contains(router3));
CHECK_EQUAL(&router1, registry.get_message_router(ROUTER1));
CHECK_EQUAL(&router2, registry.get_message_router(ROUTER2));
CHECK_EQUAL(nullptr, registry.get_message_router(ROUTER3));
CHECK_EQUAL(&router4, registry.get_message_router(ROUTER4));
CHECK_EQUAL(&router1, registry.get(ROUTER1));
CHECK_EQUAL(&router2, registry.get(ROUTER2));
CHECK_EQUAL(nullptr, registry.get(ROUTER3));
CHECK_EQUAL(&router4, registry.get(ROUTER4));
}
};
}