Merge remote-tracking branch 'origin/development'

This commit is contained in:
John Wellbelove 2015-10-07 17:28:53 +01:00
commit 3f33b3ccf7
3 changed files with 51 additions and 22 deletions

View File

@ -69,15 +69,15 @@ SOFTWARE.
///
/// direction = value; // **** Compilation error ****
///
/// std::cout << "Direction = " << direction.to_string(); // Prints "Direction = North"
/// std::cout << "Direction = " << direction.c_str(); // Prints "Direction = North"
///\endcode
/// If a conversion to a string is not required then the 'ENUM_TYPE' declaration may be omitted.
/// In that case the to_string() function will return a "?". This will also be the case for any
/// In that case the c_str() function will return a "?". This will also be the case for any
/// enumeration value that does not have an ENUM_TYPE entry.
///\ingroup utilities
//*****************************************************************************
// The declaration of the member functions and the first section of the 'to_string' function.
// The declaration of the member functions and the first section of the 'c_str' function.
//*****************************************************************************
#define DECLARE_ENUM_TYPE(TypeName, ValueType) \
typedef ValueType value_type; \
@ -95,14 +95,14 @@ SOFTWARE.
{
//*****************************************************************************
// A case in the 'to_string' function's switch statement.
// A case in the 'c_str' function's switch statement.
//*****************************************************************************
#define ENUM_TYPE(value, name) \
case value: \
return name; \
//*****************************************************************************
// The final section of the 'to_string' function and the value declaration.
// The final section of the 'c_str' function and the value declaration.
//*****************************************************************************
#define END_ENUM_TYPE \
default: \

View File

@ -315,7 +315,7 @@ namespace etl
//*************************************************************************
iterator end()
{
return iterator(end_node);
return iterator();
}
//*************************************************************************
@ -323,7 +323,7 @@ namespace etl
//*************************************************************************
const_iterator end() const
{
return const_iterator(static_cast<const Data_Node&>(end_node));
return const_iterator();
}
//*************************************************************************
@ -331,7 +331,7 @@ namespace etl
//*************************************************************************
const_iterator cend() const
{
return const_iterator(static_cast<const Data_Node&>(end_node));
return const_iterator();
}
//*************************************************************************
@ -400,7 +400,7 @@ namespace etl
{
Data_Node& data_node = allocate_data_node(*first++);
join(*p_last_node, data_node);
join(data_node, end_node);
data_node.next = nullptr;
p_last_node = &data_node;
++current_size;
}
@ -433,7 +433,7 @@ namespace etl
{
Data_Node& data_node = allocate_data_node(value);
join(*p_last_node, data_node);
join(data_node, end_node);
data_node.next = nullptr;
p_last_node = &data_node;
++current_size;
}
@ -524,11 +524,13 @@ namespace etl
{
size_t i = 0;
iterator i_node = begin();
iterator i_last_node;
// Find where we're currently at.
while ((i < n) && (i_node != end()))
{
++i;
i_last_node = i_node;
++i_node;
}
@ -542,7 +544,7 @@ namespace etl
// Increase.
while (i < n)
{
i_node = insert_after(i_node, value);
i_last_node = insert_after(i_last_node, value);
++i;
}
}
@ -573,9 +575,9 @@ namespace etl
Node* p_current = p_last->next;
Node* p_next = p_current->next;
join(*p_current, end_node);
p_current->next = nullptr;
while (p_next != &end_node)
while (p_next != nullptr)
{
p_last = p_current;
p_current = p_next;
@ -706,7 +708,14 @@ namespace etl
p_first = p_next; // Move to the next node.
}
return ++last;
if (p_next == nullptr)
{
return end();
}
else
{
return iterator(*p_last);
}
}
//*************************************************************************
@ -733,7 +742,7 @@ namespace etl
Node* last = &get_head();
Node* current = last->next;
while (current != &end_node)
while (current != nullptr)
{
// Is this value the same as the last?
if (isEqual(data_cast(current)->value, data_cast(last)->value))
@ -858,7 +867,7 @@ namespace etl
p_tail = p_node;
}
join(*p_tail.p_node, end_node);
p_tail.p_node->next = nullptr;
}
// Now left has stepped `list_size' places along, and right has too.
@ -934,7 +943,6 @@ namespace etl
}
Node start_node; ///< The node that acts as the forward_list start.
Node end_node; ///< The node that acts as the forward_list end.
private:
@ -1003,7 +1011,6 @@ namespace etl
void insert_node_after(Node& position, Node& node)
{
// Connect to the forward_list.
join(node, *position.next);
join(position, node);
// One more.
@ -1055,8 +1062,7 @@ namespace etl
}
current_size = 0;
join(start_node, end_node);
join(end_node, start_node);
start_node.next = nullptr;
}
//*************************************************************************

View File

@ -428,12 +428,35 @@ namespace
CompareDataNDC::iterator i_compare_data_2 = compare_data.begin();
std::advance(i_compare_data_2, 4);
compare_data.erase_after(i_compare_data_1, i_compare_data_2);
CompareDataNDC::iterator i_compare_result = compare_data.erase_after(i_compare_data_1, i_compare_data_2);
data.erase_after(i_data_1, i_data_2);
DataNDC::iterator i_result = data.erase_after(i_data_1, i_data_2);
CHECK_EQUAL(*i_compare_result, *i_result);
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
CHECK(are_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_erase_after_range_end)
{
CompareDataNDC compare_data(sorted_data.begin(), sorted_data.end());
DataNDC data(sorted_data.begin(), sorted_data.end());
DataNDC::iterator i_data = data.begin();
std::advance(i_data, 4);
CompareDataNDC::iterator i_compare_data = compare_data.begin();
std::advance(i_compare_data, 4);
CompareDataNDC::iterator i_compare_result = compare_data.erase_after(i_compare_data, compare_data.end());
DataNDC::iterator i_result = data.erase_after(i_data, data.end());
CHECK(i_result == data.end());
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
CHECK(are_equal);
}