incubator-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 Thu, 22 Mar 2007 04:46:29 GMT
> -----Original Message-----
> From: sebor@roguewave.com
> Sent: Wed, 21 Mar 2007 16:12:57 -0600
> To: stdcxx-dev@incubator.apache.org
> Subject: Re: [PATCH] Re: new container member functions cbegin() and
> cend()
> 
> Sorry for dropping the ball on reviewing this patch.
> 
> The changes look good to me. The two things that are missing
> and that we can't commit the patch without are: 1) tests and
> 2) a ChangeLog entry.
> 
> We haven't ported all the container tests to the new driver
> so you won't be able to simply enhance existing tests to
> exercise all the functions but you should be able to do so
> for deque, list, and string. Take a look at the tests for
> these three containers to see if you can figure out how to
> enhance them. If you need help feel free to ask. One of us
> (presumably Farid, as he has the most experience with these
> tests) should be able to answer your questions.

I would be happy to enhance the tests but all I could find are these:

23.bitset.cons.cpp
23.bitset.cpp
23.deque.iterators.cpp
23.deque.modifiers.cpp
23.deque.special.cpp
23.vector.capacity.cpp
23.vector.cons.cpp
23.vector.modifiers.cpp

There are no tests for list and I'm not sure how to enhance the deque
tests. Am I looking in the right place?

-- Mark

> 
> As for the other containers, we'll need to remember to add
> tests for these new functions when we get around to porting
> (or writing from scratch) the tests for those.
> 
> Martin
> 
> Mark Brown wrote:
>> 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