mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Updates to etl::successor
This commit is contained in:
parent
48b0c52e92
commit
aaf1f84935
@ -155,6 +155,18 @@ namespace etl
|
||||
p_successor = ETL_NULLPTR;
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
/// Clear the successor chain.
|
||||
//*************************************************************************
|
||||
void clear_successor_chain()
|
||||
{
|
||||
if (has_successor())
|
||||
{
|
||||
get_successor().clear_successor_chain();
|
||||
clear_successor();
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
/// Get the successor.
|
||||
/// Emits an etl::successor_invalid if a successor has not been set.
|
||||
|
||||
@ -371,6 +371,145 @@ namespace
|
||||
CHECK_EQUAL(2, successor2.value);
|
||||
CHECK_EQUAL(3, successor3.value);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_clear_successor)
|
||||
{
|
||||
SuccessorSameBase1 successor1;
|
||||
SuccessorSameBase2 successor2;
|
||||
SuccessorSameBase3 successor3;
|
||||
SuccessorSameBase4 successor4;
|
||||
SuccessorSameBase5 successor5;
|
||||
|
||||
successor1.set_successor(successor2, successor3, successor4, successor5);
|
||||
|
||||
successor2.clear_successor();
|
||||
|
||||
CHECK(successor1.has_successor());
|
||||
CHECK(!successor2.has_successor());
|
||||
CHECK(successor3.has_successor());
|
||||
CHECK(successor4.has_successor());
|
||||
CHECK(!successor5.has_successor());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_clear_successor_chain)
|
||||
{
|
||||
SuccessorSameBase1 successor1;
|
||||
SuccessorSameBase2 successor2;
|
||||
SuccessorSameBase3 successor3;
|
||||
SuccessorSameBase4 successor4;
|
||||
SuccessorSameBase5 successor5;
|
||||
|
||||
successor1.set_successor(successor2, successor3, successor4, successor5);
|
||||
|
||||
successor2.clear_successor_chain();
|
||||
|
||||
CHECK(successor1.has_successor());
|
||||
CHECK(!successor2.has_successor());
|
||||
CHECK(!successor3.has_successor());
|
||||
CHECK(!successor4.has_successor());
|
||||
CHECK(!successor5.has_successor());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_interative_successors)
|
||||
{
|
||||
class IProcessor : public etl::successor<IProcessor>
|
||||
{
|
||||
public:
|
||||
|
||||
//*********************************
|
||||
virtual bool Check() = 0;
|
||||
|
||||
//*********************************
|
||||
bool Process()
|
||||
{
|
||||
bool handled = false;
|
||||
|
||||
IProcessor* p = this;
|
||||
|
||||
while (handled == false)
|
||||
{
|
||||
handled = p->Check();
|
||||
|
||||
// Were we unable to handle the call?
|
||||
if (handled == false)
|
||||
{
|
||||
// Do we have a successor?
|
||||
if (p->has_successor())
|
||||
{
|
||||
// Get the next successor.
|
||||
p = &(p->get_successor());
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
};
|
||||
|
||||
//*********************************
|
||||
class Processor1 : public IProcessor
|
||||
{
|
||||
public:
|
||||
|
||||
bool Check() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//*********************************
|
||||
class Processor2 : public IProcessor
|
||||
{
|
||||
public:
|
||||
|
||||
bool Check() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//*********************************
|
||||
class Processor3 : public IProcessor
|
||||
{
|
||||
public:
|
||||
|
||||
bool Check() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//*********************************
|
||||
class Processor4 : public IProcessor
|
||||
{
|
||||
public:
|
||||
|
||||
bool Check() override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Processor1 processor1a;
|
||||
Processor1 processor1b;
|
||||
Processor2 processor2a;
|
||||
Processor2 processor2b;
|
||||
Processor3 processor3;
|
||||
Processor4 processor4;
|
||||
|
||||
processor1a.append_successor(processor2a, processor3);
|
||||
processor1b.append_successor(processor2b, processor4);
|
||||
|
||||
CHECK(processor1a.Process() == false);
|
||||
CHECK(processor1b.Process() == true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -196,6 +196,12 @@
|
||||
<Filter Include="Resource Files\Scripts">
|
||||
<UniqueIdentifier>{4ee68175-3bc2-4d30-b8bf-be7261124979}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="ETL\Messaging">
|
||||
<UniqueIdentifier>{ba688ff7-bea4-4f7e-bfab-1033d3401426}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="ETL\Messaging\Generators">
|
||||
<UniqueIdentifier>{ba80408c-0198-432a-a213-e4e2db946aab}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\include\etl\enum_type.h">
|
||||
@ -417,21 +423,9 @@
|
||||
<ClInclude Include="..\..\include\etl\fsm.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_router.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\packet.h">
|
||||
<Filter>ETL\Containers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_bus.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_types.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\scheduler.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
@ -456,9 +450,6 @@
|
||||
<ClInclude Include="..\..\include\etl\compare.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\callback_timer.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
@ -708,9 +699,6 @@
|
||||
<ClInclude Include="..\..\include\etl\mutex\mutex_freertos.h">
|
||||
<Filter>ETL\Utilities\Mutex</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_packet.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\null_type.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
@ -756,12 +744,6 @@
|
||||
<ClInclude Include="..\..\include\etl\generators\fsm_generator.h">
|
||||
<Filter>ETL\Frameworks\Generators</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generators\message_packet_generator.h">
|
||||
<Filter>ETL\Frameworks\Generators</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generators\message_router_generator.h">
|
||||
<Filter>ETL\Frameworks\Generators</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generators\variant_pool_generator.h">
|
||||
<Filter>ETL\Containers\Generators</Filter>
|
||||
</ClInclude>
|
||||
@ -816,15 +798,6 @@
|
||||
<ClInclude Include="..\..\include\etl\multi_range.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\ireference_counted_message_pool.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\reference_counted_message.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\reference_counted_message_pool.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generic_pool.h">
|
||||
<Filter>ETL\Containers</Filter>
|
||||
</ClInclude>
|
||||
@ -834,9 +807,6 @@
|
||||
<ClInclude Include="..\..\include\etl\file_error_numbers.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\shared_message.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\reference_counted_object.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
@ -852,9 +822,6 @@
|
||||
<ClInclude Include="..\..\include\etl\imemory_block_allocator.h">
|
||||
<Filter>ETL\Containers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_router_registry.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\sanity-check\c++03\etl_profile.h">
|
||||
<Filter>Tests\Sanity Checks\C++03</Filter>
|
||||
</ClInclude>
|
||||
@ -963,18 +930,12 @@
|
||||
<ClInclude Include="..\..\include\etl\callback_timer_locked.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_atomic.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\private\delegate_cpp03.h">
|
||||
<Filter>ETL\Private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\private\delegate_cpp11.h">
|
||||
<Filter>ETL\Private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_locked.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\bit.h">
|
||||
<Filter>ETL\Utilities</Filter>
|
||||
</ClInclude>
|
||||
@ -1173,9 +1134,6 @@
|
||||
<ClInclude Include="..\..\include\etl\callback_timer_interrupt.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_interrupt.h">
|
||||
<Filter>ETL\Frameworks</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\unittest++\AssertException.h">
|
||||
<Filter>UnitTest++\Header Files</Filter>
|
||||
</ClInclude>
|
||||
@ -1275,6 +1233,54 @@
|
||||
<ClInclude Include="..\unittest++\Win32\TimeHelpers.h">
|
||||
<Filter>UnitTest++\Header Files\Win32</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\ireference_counted_message_pool.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_bus.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_packet.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_router.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_router_registry.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_atomic.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_interrupt.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_timer_locked.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\message_types.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\reference_counted_message.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\reference_counted_message_pool.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\shared_message.h">
|
||||
<Filter>ETL\Messaging</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generators\message_packet_generator.h">
|
||||
<Filter>ETL\Messaging\Generators</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\generators\message_router_generator.h">
|
||||
<Filter>ETL\Messaging\Generators</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\test_string_char.cpp">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user