Merge branch 'pull-request/#1036-Add-contains()-and-contains_node()-to-etl--intrusive_forward_list' into development

This commit is contained in:
John Wellbelove 2025-03-02 12:51:43 +00:00
commit e478088081
4 changed files with 224 additions and 2 deletions

View File

@ -253,6 +253,24 @@ namespace etl
return current_size;
}
//*************************************************************************
/// Detects existence of specified node in list.
///\param search_link The node to find in list
//*************************************************************************
bool contains_node(const link_type& search_link) const
{
return is_link_in_list(&search_link);
}
//*************************************************************************
/// Detects existence of specified node in list.
///\param search_link The node to find in list
//*************************************************************************
bool contains_node(const link_type* search_link) const
{
return is_link_in_list(search_link);
}
protected:
link_type start; ///< The link pointer that acts as the intrusive_forward_list start.
@ -338,10 +356,10 @@ namespace etl
/// Tests if the link is in this list.
/// Returns the previous link to it, if found, otherwise ETL_NULLPTR.
//*************************************************************************
link_type* is_link_in_list(const link_type* search_link)
link_type* is_link_in_list(const link_type* search_link) const
{
link_type* p_link = start.etl_next;
link_type* p_previous = &start;
link_type* p_previous = const_cast<link_type*>(&start);
while (p_link != ETL_NULLPTR)
{
@ -1210,6 +1228,27 @@ namespace etl
}
}
//*************************************************************************
/// Detects existence of specified value in list.
///\param value The value to find in list
//*************************************************************************
bool contains(const_reference value) const
{
const_iterator i_item = begin();
while (i_item != end())
{
if (*i_item == value)
{
return true;
}
++i_item;
}
return false;
}
private:
#if ETL_USING_CPP17

View File

@ -255,6 +255,24 @@ namespace etl
return current_size;
}
//*************************************************************************
/// Detects existence of specified node in list.
///\param search_link The node to find in list
//*************************************************************************
bool contains_node(const link_type& search_link) const
{
return is_link_in_list(&search_link);;
}
//*************************************************************************
/// Detects existence of specified node in list.
///\param search_link The node to find in list
//*************************************************************************
bool contains_node(const link_type* search_link) const
{
return is_link_in_list(search_link);;
}
protected:
/// The link that acts as the intrusive_list start & end.
@ -1218,6 +1236,27 @@ namespace etl
}
}
//*************************************************************************
/// Detects existence of specified value in list.
///\param value The value to find in list
//*************************************************************************
bool contains(const_reference value) const
{
const_iterator i_item = begin();
while (i_item != end())
{
if (*i_item == value)
{
return true;
}
++i_item;
}
return false;
}
private:
#if ETL_USING_CPP17

View File

@ -1302,5 +1302,77 @@ namespace
CHECK_EQUAL(size_t(std::distance(compare0.begin(), compare0.end())), data0.size());
CHECK_EQUAL(size_t(std::distance(compare1.begin(), compare1.end())), data1.size());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_contains_node)
{
static ItemNDCNode node0("0");
static ItemNDCNode node1("1");
static ItemNDCNode node2("2");
static ItemNDCNode node3("3");
static ItemNDCNode node4("4");
static ItemNDCNode node5("5");
static ItemNDCNode node6("6");
static ItemNDCNode node7("7");
static ItemNDCNode node8("8");
static ItemNDCNode node9("9");
DataNDC0 data0;
data0.push_front(node0);
data0.push_front(node1);
data0.push_front(node2);
data0.push_front(node3);
data0.push_front(node4);
data0.push_front(node5);
CHECK_TRUE(data0.contains_node(node0));
CHECK_TRUE(data0.contains_node(node1));
CHECK_TRUE(data0.contains_node(node2));
CHECK_TRUE(data0.contains_node(node3));
CHECK_TRUE(data0.contains_node(node4));
CHECK_TRUE(data0.contains_node(node5));
CHECK_FALSE(data0.contains_node(node6));
CHECK_FALSE(data0.contains_node(node7));
CHECK_FALSE(data0.contains_node(node8));
CHECK_FALSE(data0.contains_node(node9));
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_contains)
{
static ItemNDCNode node0("0");
static ItemNDCNode node1("1");
static ItemNDCNode node2("2");
static ItemNDCNode node3("3");
static ItemNDCNode node4("4");
static ItemNDCNode node5("5");
static ItemNDCNode node6("6");
static ItemNDCNode node7("7");
static ItemNDCNode node8("8");
static ItemNDCNode node9("9");
DataNDC0 data0;
data0.push_front(node0);
data0.push_front(node1);
data0.push_front(node2);
data0.push_front(node3);
data0.push_front(node4);
data0.push_front(node5);
CHECK_TRUE(data0.contains(ItemNDCNode("0")));
ItemNDCNode compare_node1("1");
CHECK_TRUE(data0.contains(compare_node1));
CHECK_FALSE(data0.contains(ItemNDCNode("6")));
ItemNDCNode compare_node2("7");
CHECK_FALSE(data0.contains(compare_node2));
}
};
}

View File

@ -1519,5 +1519,77 @@ namespace
CHECK_EQUAL(data0.size(), compare0.size());
CHECK_EQUAL(data1.size(), compare1.size());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_contains_node)
{
static ItemNDCNode node0("0");
static ItemNDCNode node1("1");
static ItemNDCNode node2("2");
static ItemNDCNode node3("3");
static ItemNDCNode node4("4");
static ItemNDCNode node5("5");
static ItemNDCNode node6("6");
static ItemNDCNode node7("7");
static ItemNDCNode node8("8");
static ItemNDCNode node9("9");
DataNDC0 data0;
data0.push_front(node0);
data0.push_front(node1);
data0.push_front(node2);
data0.push_front(node3);
data0.push_front(node4);
data0.push_front(node5);
CHECK_TRUE(data0.contains_node(node0));
CHECK_TRUE(data0.contains_node(node1));
CHECK_TRUE(data0.contains_node(node2));
CHECK_TRUE(data0.contains_node(node3));
CHECK_TRUE(data0.contains_node(node4));
CHECK_TRUE(data0.contains_node(node5));
CHECK_FALSE(data0.contains_node(node6));
CHECK_FALSE(data0.contains_node(node7));
CHECK_FALSE(data0.contains_node(node8));
CHECK_FALSE(data0.contains_node(node9));
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_contains)
{
static ItemNDCNode node0("0");
static ItemNDCNode node1("1");
static ItemNDCNode node2("2");
static ItemNDCNode node3("3");
static ItemNDCNode node4("4");
static ItemNDCNode node5("5");
static ItemNDCNode node6("6");
static ItemNDCNode node7("7");
static ItemNDCNode node8("8");
static ItemNDCNode node9("9");
DataNDC0 data0;
data0.push_front(node0);
data0.push_front(node1);
data0.push_front(node2);
data0.push_front(node3);
data0.push_front(node4);
data0.push_front(node5);
CHECK_TRUE(data0.contains(ItemNDCNode("0")));
ItemNDCNode compare_node1("1");
CHECK_TRUE(data0.contains(compare_node1));
CHECK_FALSE(data0.contains(ItemNDCNode("6")));
ItemNDCNode compare_node2("7");
CHECK_FALSE(data0.contains(compare_node2));
}
};
}