mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-26 20:38:45 +08:00
Merge branch 'pull-request/#1036-Add-contains()-and-contains_node()-to-etl--intrusive_forward_list' into development
This commit is contained in:
commit
e478088081
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user