stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Brown <mbr...@inbox.com>
Subject Re: [PATCH] Re: new container member functions cbegin() and cend()
Date Tue, 13 Mar 2007 16:39:46 GMT
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: sebor@roguewave.com
> Sent: Tue, 13 Mar 2007 10:33:40 -0600
> To: stdcxx-dev@incubator.apache.org
> 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 <mbrown@inbox.com>
>> 
>> 	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: mbrown@inbox.com
>>> Sent: Sat, 10 Mar 2007 10:12:09 -0800
>>> To: stdcxx-dev@incubator.apache.org, stdcxx-dev@incubator.apache.org
>>> Subject: Re: new container member functions cbegin() and cend()
>>> 
>>>> -----Original Message-----
>>>> From: sebor@roguewave.com
>>>> Sent: Fri, 09 Mar 2007 13:44:49 -0700
>>>> To: stdcxx-dev@incubator.apache.org
>>>> 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!

Mime
View raw message