How frustrating!
Here it is again, this time inline:
Index: /home/mbrown/stdcxx/include/map
===================================================================
--- /home/mbrown/stdcxx/include/map (revision 516799)
+++ /home/mbrown/stdcxx/include/map (working copy)
@@ -167,6 +167,10 @@
return _C_rep.begin ();
}
+ const_iterator cbegin () const {
+ return _C_rep.begin ();
+ }
+
iterator end () {
return _C_rep.end ();
}
@@ -175,6 +179,10 @@
return _C_rep.end ();
}
+ const_iterator cend () const {
+ return _C_rep.end ();
+ }
+
reverse_iterator rbegin () {
return _C_rep.rbegin ();
}
@@ -183,6 +191,10 @@
return _C_rep.rbegin ();
}
+ const_reverse_iterator crbegin () const {
+ return _C_rep.rbegin ();
+ }
+
reverse_iterator rend () {
return _C_rep.rend ();
}
@@ -191,6 +203,10 @@
return _C_rep.rend ();
}
+ const_reverse_iterator crend () const {
+ return _C_rep.rend ();
+ }
+
bool empty () const {
return _C_rep.empty ();
}
Index: /home/mbrown/stdcxx/include/set
===================================================================
--- /home/mbrown/stdcxx/include/set (revision 516799)
+++ /home/mbrown/stdcxx/include/set (working copy)
@@ -160,12 +160,16 @@
//
iterator begin () { return _C_rep.begin (); }
const_iterator begin () const { return _C_rep.begin (); }
+ const_iterator cbegin () const { return _C_rep.begin (); }
iterator end () { return _C_rep.end (); }
const_iterator end () const { return _C_rep.end (); }
+ const_iterator cend () const { return _C_rep.end (); }
reverse_iterator rbegin () { return _C_rep.rbegin (); }
const_reverse_iterator rbegin () const { return _C_rep.rbegin (); }
+ const_reverse_iterator crbegin() const { return _C_rep.rbegin (); }
reverse_iterator rend () { return _C_rep.rend (); }
const_reverse_iterator rend () const { return _C_rep.rend (); }
+ const_reverse_iterator crend () const { return _C_rep.rend (); }
//
// capacity
Index: /home/mbrown/stdcxx/include/string
===================================================================
--- /home/mbrown/stdcxx/include/string (revision 516799)
+++ /home/mbrown/stdcxx/include/string (working copy)
@@ -214,6 +214,10 @@
return _C_make_iter (_C_data);
}
+ const_iterator cbegin () const {
+ return _C_make_iter (_C_data);
+ }
+
iterator end () {
// disable reference counting
return begin () + size ();
@@ -223,6 +227,10 @@
return _C_make_iter (_C_data + size ());
}
+ const_iterator cend () const {
+ return _C_make_iter (_C_data + size ());
+ }
+
reverse_iterator rbegin () {
return reverse_iterator (end ());
}
@@ -231,6 +239,10 @@
return const_reverse_iterator (end ());
}
+ const_reverse_iterator crbegin () const {
+ return const_reverse_iterator (end ());
+ }
+
reverse_iterator rend () {
return reverse_iterator (begin ());
}
@@ -239,6 +251,10 @@
return const_reverse_iterator (begin ());
}
+ const_reverse_iterator crend () const {
+ return const_reverse_iterator (begin ());
+ }
+
size_type size () const {
return _C_pref ()->size ();
}
Index: /home/mbrown/stdcxx/include/vector
===================================================================
--- /home/mbrown/stdcxx/include/vector (revision 516799)
+++ /home/mbrown/stdcxx/include/vector (working copy)
@@ -259,6 +259,10 @@
return _C_make_iter (_C_begin);
}
+ const_iterator cbegin () const {
+ return _C_make_iter (_C_begin);
+ }
+
iterator end () {
return _C_make_iter (_C_end);
}
@@ -267,6 +271,10 @@
return _C_make_iter (_C_end);
}
+ const_iterator cend () const {
+ return _C_make_iter (_C_end);
+ }
+
reverse_iterator rbegin () {
return reverse_iterator (end ());
}
@@ -275,6 +283,10 @@
return const_reverse_iterator (end ());
}
+ const_reverse_iterator crbegin () const {
+ return const_reverse_iterator (end ());
+ }
+
reverse_iterator rend () {
return reverse_iterator (begin ());
}
@@ -283,6 +295,10 @@
return const_reverse_iterator (begin ());
}
+ const_reverse_iterator crend () const {
+ return const_reverse_iterator (begin ());
+ }
+
size_type size () const {
return size_type (_C_end - _C_begin);
}
@@ -1279,23 +1295,45 @@
// iterators
//
iterator begin () { return _C_begin; }
- const_iterator begin () const
- { return const_iterator(_C_begin._C_p,_C_begin._C_offset); }
+
+ const_iterator begin () const {
+ return const_iterator (_C_begin._C_p, _C_begin._C_offset);
+ }
+
+ const_iterator cbegin () const {
+ return const_iterator (_C_begin._C_p, _C_begin._C_offset);
+ }
+
iterator end () { return _C_end; }
- const_iterator end () const
- { return const_iterator(_C_end._C_p,_C_end._C_offset); }
+ const_iterator end () const {
+ return const_iterator(_C_end._C_p,_C_end._C_offset);
+ }
+
+ const_iterator cend () const {
+ return const_iterator (_C_end._C_p, _C_end._C_offset);
+ }
+
reverse_iterator rbegin () { return reverse_iterator(end()); }
const_reverse_iterator rbegin () const
{
return const_reverse_iterator(end());
}
+
+ const_reverse_iterator crbegin () const {
+ return const_reverse_iterator(end());
+ }
+
reverse_iterator rend () { return reverse_iterator(begin()); }
const_reverse_iterator rend () const
{
return const_reverse_iterator(begin());
}
+ const_reverse_iterator crend () const {
+ return const_reverse_iterator(begin());
+ }
+
//
// capacity
//
Index: /home/mbrown/stdcxx/include/deque
===================================================================
--- /home/mbrown/stdcxx/include/deque (revision 516799)
+++ /home/mbrown/stdcxx/include/deque (working copy)
@@ -516,6 +516,10 @@
return _C_make_iter (_C_beg);
}
+ const_iterator cbegin () const {
+ return _C_make_iter (_C_beg);
+ }
+
iterator end () {
return _C_make_iter (_C_end);
}
@@ -524,6 +528,10 @@
return _C_make_iter (_C_end);
}
+ const_iterator cend () const {
+ return _C_make_iter (_C_end);
+ }
+
reverse_iterator rbegin () {
return reverse_iterator (end ());
}
@@ -532,6 +540,10 @@
return const_reverse_iterator (end ());
}
+ const_reverse_iterator crbegin () const {
+ return const_reverse_iterator (end ());
+ }
+
reverse_iterator rend () {
return reverse_iterator (begin ());
}
@@ -540,6 +552,10 @@
return const_reverse_iterator (begin ());
}
+ const_reverse_iterator crend () const {
+ return const_reverse_iterator (begin ());
+ }
+
bool empty () const {
return _C_beg._C_node == _C_end._C_node
&& _C_beg._C_cur == _C_end._C_cur;
Index: /home/mbrown/stdcxx/include/list
===================================================================
--- /home/mbrown/stdcxx/include/list (revision 516799)
+++ /home/mbrown/stdcxx/include/list (working copy)
@@ -504,6 +504,10 @@
return _C_make_iter ((*_C_node)._C_next);
}
+ const_iterator cbegin () const {
+ return _C_make_iter ((*_C_node)._C_next);
+ }
+
iterator end () {
return _C_make_iter (_C_node);
}
@@ -512,6 +516,10 @@
return _C_make_iter (_C_node);
}
+ const_iterator cend () const {
+ return _C_make_iter (_C_node);
+ }
+
reverse_iterator rbegin () {
return reverse_iterator (end ());
}
@@ -520,6 +528,10 @@
return const_reverse_iterator (end ());
}
+ const_reverse_iterator crbegin () const {
+ return const_reverse_iterator (end ());
+ }
+
reverse_iterator rend () {
return reverse_iterator (begin ());
}
@@ -528,6 +540,10 @@
return const_reverse_iterator (begin ());
}
+ const_reverse_iterator crend () const {
+ return const_reverse_iterator (begin ());
+ }
+
bool empty () const {
return 0 == size ();
}
-- Mark
-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Tue, 13 Mar 2007 10:33:40 -0600
To: [email protected]
Subject: Re: [PATCH] Re: new container member functions cbegin() and
cend()
Mark Brown wrote:
Attached is my first attempt at a patch implementing these functions.
Please let me know if I've missed something. The ChangeLong entry is
here:
Sorry Mark but the patch got stripped again.
Martin
2007-03-13 Mark Brown <[EMAIL PROTECTED]>
STDCXX-335
* map (cbegin, cend, crbegin, crend): Implemented new accessor
functions.
* set: Same.
* string: Same.
* vector: Same.
* deque: Same.
* list: Same.
-- Mark
-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Sat, 10 Mar 2007 10:12:09 -0800
To: [email protected], [email protected]
Subject: Re: new container member functions cbegin() and cend()
-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Fri, 09 Mar 2007 13:44:49 -0700
To: [email protected]
Subject: Re: new container member functions cbegin() and cend()
Mark Brown wrote:
The next C++ standard adds a couple of new container member
functions,
cbegin() and cend(), that will make it easier to retrieve const
iterators from non-const container objects. Are there any plans to
add
these functions to stdcxx?
I assume you're referring to the Working Draft of the Standard for
Programming Language C++:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2134.pdf
and the functions are those proposed in Walter Brown's Proposal
to Improve const_iterator Use from C++0X:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1674.pdf
Yes, the functions from Alternative 1 are the ones I was referring
to. They will become especially handy when the "auto" feature is
available in compilers. Does anyone know of a compiler that
supports this use of auto?
I have no immediate plans to implement these functions but we
certainly expect and plan to implement the new C++ standard by
the time it comes out.
If you would like to submit a patch with these functions or any
other feature that's expected to be in the next standard you
are most welcome to do so. Small extensions like this one might
be okay for trunk. Bigger features will probably be more
appropriate for a yet-to-be created branch as suggested in
STDCXX-299: https://issues.apache.org/jira/browse/STDCXX-299
I will work on a patch.
-- Mark
Martin
-- Mark
____________________________________________________________
GET FREE 5GB ONLINE STORAGE - Safely store your documents, photos and music
online!
Visit http://www.inbox.com/storage to find out more!