mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Added message_router_registry
This commit is contained in:
parent
563fc07186
commit
03f6299d63
@ -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;
|
||||
|
||||
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user