Skip to content

Commit 3d2b2f4

Browse files
author
paolo
committed
2013-06-27 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_deque.h (deque<>::insert(iterator, const value_type&), deque<>::insert(iterator, value_type&&), deque<>::emplace(iterator, _Args&&...)): Adjust C++11 signatures to take a const_iterator. (deque<>::erase): Simplify. * include/bits/stl_list.h: Likewise. (_List_iterator<>::_M_const_cast): Add. * include/bits/stl_vector.h: Likewise. * include/bits/stl_bvector.h: Likewise. (_Bit_iterator::_M_const_cast): Add. * include/bits/deque.tcc: Adjust definitions. * include/bits/list.tcc: Likewise. * include/bits/vector.tcc: Likewise. * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): Define trivial version in C++98 mode. * include/ext/vstring.h (__versa_string<>::insert(iterator, _CharT), __versa_string<>::replace(iterator, iterator, const __versa_string&), __versa_string<>::replace(iterator, iterator, const _CharT*, size_type), __versa_string<>::replace(iterator, iterator, const _CharT*), __versa_string<>::replace(iterator, iterator, size_type, _CharT)): Adjust C++11 signatures to take a pair of const_iterators. * include/debug/deque: Adjust. * include/debug/list: Likewise. * include/debug/vector: Likewise. * include/profile/deque: Likewise. * include/profile/list: Likewise. * include/profile/vector: Likewise. (vector<>::emplace): Add. * testsuite/util/exception/safety.h: Update. * testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc: New. * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: Likewise. * testsuite/23_containers/list/modifiers/emplace/const_iterator.cc: Likewise. * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: Likewise. * testsuite/23_containers/vector/bool/modifiers/insert/ const_iterator.cc: Likewise. * testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc: Likewise. * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: Likewise. * testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc: Likewise. * testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc: Likewise. * testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc: Likewise. * testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc: Likewise. * testsuite/ext/vstring/modifiers/char/54577.cc: Move to testsuite/ ext/vstring/modifiers/erase/char/. * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Move to testsuite/ ext/vstring/modifiers/wchar_t/. * testsuite/ext/vstring/modifiers/char/pop_back.cc: Move to testsuite/ ext/vstring/modifiers/pop_back/char/. * testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc: Move to testsuite/ext/vstring/modifiers/pop_back/wchar_t/. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Adjust dg-error line number. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@200458 138bc75d-0d04-0410-961f-82ee72b054a4
1 parent 5ada7a1 commit 3d2b2f4

File tree

44 files changed

+623
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+623
-171
lines changed

libstdc++-v3/ChangeLog

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,92 @@
1+
2013-06-27 Paolo Carlini <paolo.carlini@oracle.com>
2+
3+
* include/bits/stl_deque.h (deque<>::insert(iterator,
4+
const value_type&), deque<>::insert(iterator, value_type&&),
5+
deque<>::emplace(iterator, _Args&&...)): Adjust C++11 signatures to
6+
take a const_iterator.
7+
(deque<>::erase): Simplify.
8+
* include/bits/stl_list.h: Likewise.
9+
(_List_iterator<>::_M_const_cast): Add.
10+
* include/bits/stl_vector.h: Likewise.
11+
* include/bits/stl_bvector.h: Likewise.
12+
(_Bit_iterator::_M_const_cast): Add.
13+
* include/bits/deque.tcc: Adjust definitions.
14+
* include/bits/list.tcc: Likewise.
15+
* include/bits/vector.tcc: Likewise.
16+
* include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast):
17+
Define trivial version in C++98 mode.
18+
* include/ext/vstring.h (__versa_string<>::insert(iterator, _CharT),
19+
__versa_string<>::replace(iterator, iterator, const __versa_string&),
20+
__versa_string<>::replace(iterator, iterator, const _CharT*,
21+
size_type), __versa_string<>::replace(iterator, iterator,
22+
const _CharT*), __versa_string<>::replace(iterator, iterator,
23+
size_type, _CharT)): Adjust C++11 signatures to take a pair of
24+
const_iterators.
25+
* include/debug/deque: Adjust.
26+
* include/debug/list: Likewise.
27+
* include/debug/vector: Likewise.
28+
* include/profile/deque: Likewise.
29+
* include/profile/list: Likewise.
30+
* include/profile/vector: Likewise.
31+
(vector<>::emplace): Add.
32+
* testsuite/util/exception/safety.h: Update.
33+
* testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc:
34+
New.
35+
* testsuite/23_containers/deque/modifiers/insert/const_iterator.cc:
36+
Likewise.
37+
* testsuite/23_containers/list/modifiers/emplace/const_iterator.cc:
38+
Likewise.
39+
* testsuite/23_containers/list/modifiers/insert/const_iterator.cc:
40+
Likewise.
41+
* testsuite/23_containers/vector/bool/modifiers/insert/
42+
const_iterator.cc: Likewise.
43+
* testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc:
44+
Likewise.
45+
* testsuite/23_containers/vector/modifiers/insert/const_iterator.cc:
46+
Likewise.
47+
* testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc:
48+
Likewise.
49+
* testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc:
50+
Likewise.
51+
* testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc:
52+
Likewise.
53+
* testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc:
54+
Likewise.
55+
56+
* testsuite/ext/vstring/modifiers/char/54577.cc: Move to testsuite/
57+
ext/vstring/modifiers/erase/char/.
58+
* testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Move to testsuite/
59+
ext/vstring/modifiers/wchar_t/.
60+
* testsuite/ext/vstring/modifiers/char/pop_back.cc: Move to testsuite/
61+
ext/vstring/modifiers/pop_back/char/.
62+
* testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc: Move to
63+
testsuite/ext/vstring/modifiers/pop_back/wchar_t/.
64+
65+
* testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
66+
Adjust dg-error line number.
67+
* testsuite/23_containers/deque/requirements/dr438/
68+
constructor_1_neg.cc: Likewise.
69+
* testsuite/23_containers/deque/requirements/dr438/
70+
constructor_2_neg.cc: Likewise.
71+
* testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
72+
Likewise.
73+
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
74+
Likewise.
75+
* testsuite/23_containers/list/requirements/dr438/
76+
constructor_1_neg.cc: Likewise.
77+
* testsuite/23_containers/list/requirements/dr438/
78+
constructor_2_neg.cc: Likewise.
79+
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
80+
Likewise.
81+
* testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
82+
Likewise.
83+
* testsuite/23_containers/vector/requirements/dr438/
84+
constructor_1_neg.cc: Likewise.
85+
* testsuite/23_containers/vector/requirements/dr438/
86+
constructor_2_neg.cc: Likewise.
87+
* testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
88+
Likewise.
89+
190
2013-06-25 Ed Smith-Rowland <3dw4rd@verizon.net>
291

392
Status page for C++2014 library features

libstdc++-v3/include/bits/deque.tcc

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -143,33 +143,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
143143
}
144144
#endif
145145

146-
template <typename _Tp, typename _Alloc>
147-
typename deque<_Tp, _Alloc>::iterator
148-
deque<_Tp, _Alloc>::
149-
insert(iterator __position, const value_type& __x)
150-
{
151-
if (__position._M_cur == this->_M_impl._M_start._M_cur)
152-
{
153-
push_front(__x);
154-
return this->_M_impl._M_start;
155-
}
156-
else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
157-
{
158-
push_back(__x);
159-
iterator __tmp = this->_M_impl._M_finish;
160-
--__tmp;
161-
return __tmp;
162-
}
163-
else
164-
return _M_insert_aux(__position, __x);
165-
}
166-
167146
#if __cplusplus >= 201103L
168147
template<typename _Tp, typename _Alloc>
169148
template<typename... _Args>
170149
typename deque<_Tp, _Alloc>::iterator
171150
deque<_Tp, _Alloc>::
172-
emplace(iterator __position, _Args&&... __args)
151+
emplace(const_iterator __position, _Args&&... __args)
173152
{
174153
if (__position._M_cur == this->_M_impl._M_start._M_cur)
175154
{
@@ -184,10 +163,36 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
184163
return __tmp;
185164
}
186165
else
187-
return _M_insert_aux(__position, std::forward<_Args>(__args)...);
166+
return _M_insert_aux(__position._M_const_cast(),
167+
std::forward<_Args>(__args)...);
188168
}
189169
#endif
190170

171+
template <typename _Tp, typename _Alloc>
172+
typename deque<_Tp, _Alloc>::iterator
173+
deque<_Tp, _Alloc>::
174+
#if __cplusplus >= 201103L
175+
insert(const_iterator __position, const value_type& __x)
176+
#else
177+
insert(iterator __position, const value_type& __x)
178+
#endif
179+
{
180+
if (__position._M_cur == this->_M_impl._M_start._M_cur)
181+
{
182+
push_front(__x);
183+
return this->_M_impl._M_start;
184+
}
185+
else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
186+
{
187+
push_back(__x);
188+
iterator __tmp = this->_M_impl._M_finish;
189+
--__tmp;
190+
return __tmp;
191+
}
192+
else
193+
return _M_insert_aux(__position._M_const_cast(), __x);
194+
}
195+
191196
template <typename _Tp, typename _Alloc>
192197
typename deque<_Tp, _Alloc>::iterator
193198
deque<_Tp, _Alloc>::

libstdc++-v3/include/bits/list.tcc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,21 +85,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
8585
template<typename... _Args>
8686
typename list<_Tp, _Alloc>::iterator
8787
list<_Tp, _Alloc>::
88-
emplace(iterator __position, _Args&&... __args)
88+
emplace(const_iterator __position, _Args&&... __args)
8989
{
9090
_Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
91-
__tmp->_M_hook(__position._M_node);
91+
__tmp->_M_hook(__position._M_const_cast()._M_node);
9292
return iterator(__tmp);
9393
}
9494
#endif
9595

9696
template<typename _Tp, typename _Alloc>
9797
typename list<_Tp, _Alloc>::iterator
9898
list<_Tp, _Alloc>::
99+
#if __cplusplus >= 201103L
100+
insert(const_iterator __position, const value_type& __x)
101+
#else
99102
insert(iterator __position, const value_type& __x)
103+
#endif
100104
{
101105
_Node* __tmp = _M_create_node(__x);
102-
__tmp->_M_hook(__position._M_node);
106+
__tmp->_M_hook(__position._M_const_cast()._M_node);
103107
return iterator(__tmp);
104108
}
105109

@@ -113,11 +117,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
113117
#endif
114118
{
115119
iterator __ret = iterator(__position._M_node->_M_next);
116-
#if __cplusplus >= 201103L
117120
_M_erase(__position._M_const_cast());
118-
#else
119-
_M_erase(__position);
120-
#endif
121121
return __ret;
122122
}
123123

libstdc++-v3/include/bits/stl_bvector.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
222222
_Bit_iterator(_Bit_type * __x, unsigned int __y)
223223
: _Bit_iterator_base(__x, __y) { }
224224

225+
iterator
226+
_M_const_cast() const
227+
{ return *this; }
228+
225229
reference
226230
operator*() const
227231
{ return reference(_M_p, 1UL << _M_offset); }
@@ -859,14 +863,18 @@ template<typename _Alloc>
859863
}
860864

861865
iterator
866+
#if __cplusplus >= 201103L
867+
insert(const_iterator __position, const bool& __x = bool())
868+
#else
862869
insert(iterator __position, const bool& __x = bool())
870+
#endif
863871
{
864872
const difference_type __n = __position - begin();
865873
if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage
866874
&& __position == end())
867875
*this->_M_impl._M_finish++ = __x;
868876
else
869-
_M_insert_aux(__position, __x);
877+
_M_insert_aux(__position._M_const_cast(), __x);
870878
return begin() + __n;
871879
}
872880

@@ -904,20 +912,18 @@ template<typename _Alloc>
904912
iterator
905913
#if __cplusplus >= 201103L
906914
erase(const_iterator __position)
907-
{ return _M_erase(__position._M_const_cast()); }
908915
#else
909916
erase(iterator __position)
910-
{ return _M_erase(__position); }
911917
#endif
918+
{ return _M_erase(__position._M_const_cast()); }
912919

913920
iterator
914921
#if __cplusplus >= 201103L
915922
erase(const_iterator __first, const_iterator __last)
916-
{ return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
917923
#else
918924
erase(iterator __first, iterator __last)
919-
{ return _M_erase(__first, __last); }
920925
#endif
926+
{ return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
921927

922928
void
923929
resize(size_type __new_size, bool __x = bool())

libstdc++-v3/include/bits/stl_deque.h

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14581458
#if __cplusplus >= 201103L
14591459
/**
14601460
* @brief Inserts an object in %deque before specified iterator.
1461-
* @param __position An iterator into the %deque.
1461+
* @param __position A const_iterator into the %deque.
14621462
* @param __args Arguments.
14631463
* @return An iterator that points to the inserted data.
14641464
*
@@ -1467,9 +1467,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14671467
*/
14681468
template<typename... _Args>
14691469
iterator
1470-
emplace(iterator __position, _Args&&... __args);
1471-
#endif
1470+
emplace(const_iterator __position, _Args&&... __args);
14721471

1472+
/**
1473+
* @brief Inserts given value into %deque before specified iterator.
1474+
* @param __position A const_iterator into the %deque.
1475+
* @param __x Data to be inserted.
1476+
* @return An iterator that points to the inserted data.
1477+
*
1478+
* This function will insert a copy of the given value before the
1479+
* specified location.
1480+
*/
1481+
iterator
1482+
insert(const_iterator __position, const value_type& __x);
1483+
#else
14731484
/**
14741485
* @brief Inserts given value into %deque before specified iterator.
14751486
* @param __position An iterator into the %deque.
@@ -1481,19 +1492,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14811492
*/
14821493
iterator
14831494
insert(iterator __position, const value_type& __x);
1495+
#endif
14841496

14851497
#if __cplusplus >= 201103L
14861498
/**
14871499
* @brief Inserts given rvalue into %deque before specified iterator.
1488-
* @param __position An iterator into the %deque.
1500+
* @param __position A const_iterator into the %deque.
14891501
* @param __x Data to be inserted.
14901502
* @return An iterator that points to the inserted data.
14911503
*
14921504
* This function will insert a copy of the given rvalue before the
14931505
* specified location.
14941506
*/
14951507
iterator
1496-
insert(iterator __position, value_type&& __x)
1508+
insert(const_iterator __position, value_type&& __x)
14971509
{ return emplace(__position, std::move(__x)); }
14981510

14991511
/**
@@ -1568,11 +1580,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
15681580
iterator
15691581
#if __cplusplus >= 201103L
15701582
erase(const_iterator __position)
1571-
{ return _M_erase(__position._M_const_cast()); }
15721583
#else
15731584
erase(iterator __position)
1574-
{ return _M_erase(__position); }
15751585
#endif
1586+
{ return _M_erase(__position._M_const_cast()); }
15761587

15771588
/**
15781589
* @brief Remove a range of elements.
@@ -1593,11 +1604,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
15931604
iterator
15941605
#if __cplusplus >= 201103L
15951606
erase(const_iterator __first, const_iterator __last)
1596-
{ return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
15971607
#else
15981608
erase(iterator __first, iterator __last)
1599-
{ return _M_erase(__first, __last); }
16001609
#endif
1610+
{ return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
16011611

16021612
/**
16031613
* @brief Swaps data with another %deque.

libstdc++-v3/include/bits/stl_iterator.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -734,19 +734,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
734734
_Container>::__type>& __i)
735735
: _M_current(__i.base()) { }
736736

737+
#if __cplusplus >= 201103L
737738
__normal_iterator<typename _Container::pointer, _Container>
738739
_M_const_cast() const
739740
{
740-
#if __cplusplus >= 201103L
741741
using _PTraits = std::pointer_traits<typename _Container::pointer>;
742742
return __normal_iterator<typename _Container::pointer, _Container>
743743
(_PTraits::pointer_to(const_cast<typename _PTraits::element_type&>
744744
(*_M_current)));
745+
}
745746
#else
746-
return __normal_iterator<typename _Container::pointer, _Container>
747-
(const_cast<typename _Container::pointer>(_M_current));
747+
__normal_iterator
748+
_M_const_cast() const
749+
{ return *this; }
748750
#endif
749-
}
750751

751752
// Forward iterator requirements
752753
reference

0 commit comments

Comments
 (0)