Avoid copying of singular iterators
Change-Id: If873d2c369ef6458fdf3289f09802e90dc7367f2
This commit is contained in:
1
external/mdds/UnpackedTarball_mdds.mk
vendored
1
external/mdds/UnpackedTarball_mdds.mk
vendored
@@ -15,6 +15,7 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,mdds,3))
|
|||||||
|
|
||||||
$(eval $(call gb_UnpackedTarball_add_patches,mdds,\
|
$(eval $(call gb_UnpackedTarball_add_patches,mdds,\
|
||||||
external/mdds/mdds_0.6.0.patch \
|
external/mdds/mdds_0.6.0.patch \
|
||||||
|
external/mdds/mdds-c++98.patch.0 \
|
||||||
))
|
))
|
||||||
|
|
||||||
# vim: set noet sw=4 ts=4:
|
# vim: set noet sw=4 ts=4:
|
||||||
|
84
external/mdds/mdds-c++98.patch.0
vendored
Normal file
84
external/mdds/mdds-c++98.patch.0
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
--- include/mdds/multi_type_vector_itr.hpp
|
||||||
|
+++ include/mdds/multi_type_vector_itr.hpp
|
||||||
|
@@ -139,14 +139,15 @@
|
||||||
|
typedef typename parent_type::size_type size_type;
|
||||||
|
typedef iterator_value_node<size_type, typename parent_type::element_block_type> node;
|
||||||
|
|
||||||
|
- iterator_common_base() : m_cur_node(0, 0) {}
|
||||||
|
+ iterator_common_base() : m_cur_node(0, 0), m_singular(true) {}
|
||||||
|
|
||||||
|
iterator_common_base(
|
||||||
|
const base_iterator_type& pos, const base_iterator_type& end,
|
||||||
|
size_type start_pos, size_type block_index) :
|
||||||
|
m_cur_node(start_pos, block_index),
|
||||||
|
m_pos(pos),
|
||||||
|
- m_end(end)
|
||||||
|
+ m_end(end),
|
||||||
|
+ m_singular(false)
|
||||||
|
{
|
||||||
|
if (m_pos != m_end)
|
||||||
|
update_node();
|
||||||
|
@@ -154,9 +155,13 @@
|
||||||
|
|
||||||
|
iterator_common_base(const iterator_common_base& other) :
|
||||||
|
m_cur_node(other.m_cur_node),
|
||||||
|
- m_pos(other.m_pos),
|
||||||
|
- m_end(other.m_end)
|
||||||
|
+ m_singular(other.m_singular)
|
||||||
|
{
|
||||||
|
+ if (!m_singular)
|
||||||
|
+ {
|
||||||
|
+ m_pos = other.m_pos;
|
||||||
|
+ m_end = other.m_end;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_node()
|
||||||
|
@@ -196,6 +201,7 @@
|
||||||
|
node m_cur_node;
|
||||||
|
base_iterator_type m_pos;
|
||||||
|
base_iterator_type m_end;
|
||||||
|
+ bool m_singular;
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool operator== (const iterator_common_base& other) const
|
||||||
|
@@ -218,8 +224,12 @@
|
||||||
|
iterator_common_base& operator= (const iterator_common_base& other)
|
||||||
|
{
|
||||||
|
m_cur_node = other.m_cur_node;
|
||||||
|
- m_pos = other.m_pos;
|
||||||
|
- m_end = other.m_end;
|
||||||
|
+ m_singular = other.m_singular;
|
||||||
|
+ if (!m_singular)
|
||||||
|
+ {
|
||||||
|
+ m_pos = other.m_pos;
|
||||||
|
+ m_end = other.m_end;
|
||||||
|
+ }
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -226,8 +236,22 @@
|
||||||
|
void swap(iterator_common_base& other)
|
||||||
|
{
|
||||||
|
m_cur_node.swap(other.m_cur_node);
|
||||||
|
- std::swap(m_pos, other.m_pos);
|
||||||
|
- std::swap(m_end, other.m_end);
|
||||||
|
+ std::swap(m_singular, other.m_singular);
|
||||||
|
+ if (!(m_singular || other.m_singular))
|
||||||
|
+ {
|
||||||
|
+ std::swap(m_pos, other.m_pos);
|
||||||
|
+ std::swap(m_end, other.m_end);
|
||||||
|
+ }
|
||||||
|
+ else if (!m_singular)
|
||||||
|
+ {
|
||||||
|
+ m_pos = other.m_pos;
|
||||||
|
+ m_end = other.m_end;
|
||||||
|
+ }
|
||||||
|
+ else if (!other.m_singular)
|
||||||
|
+ {
|
||||||
|
+ other.m_pos = m_pos;
|
||||||
|
+ other.m_end = m_end;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
const node& get_node() const { return m_cur_node; }
|
Reference in New Issue
Block a user