Patchwork debug safe iterator patch

login
register
mail settings
Submitter François Dumont
Date Feb. 6, 2012, 8:21 p.m.
Message ID <4F30365E.8020806@gmail.com>
Download mbox | patch
Permalink /patch/139789/
State New
Headers show

Comments

François Dumont - Feb. 6, 2012, 8:21 p.m.
Attached patch applied

2012-02-06  François Dumont <fdumont@gcc.gnu.org>

         * include/debug/safe_iterator.h
         (_Safe_iterator::_M_before_dereferenceable): Avoid the expensive
         creation of a _Safe_iterator instance to do the check.

François

On 02/05/2012 06:30 PM, Paolo Carlini wrote:
> On 02/05/2012 06:29 PM, François Dumont wrote:
>> Hi
>>
>>     Here is a small performance patch for the debug mode. Nothing 
>> urgent, just tell me if I can apply it on trunk at the moment.
> It impacts only debug-mode, thus it's pretty safe. If you tested it 
> check-debug I guess you can commit it to mainline even now.
>
> Thanks,
> Paolo.
>

Patch

Index: include/debug/safe_iterator.h
===================================================================
--- include/debug/safe_iterator.h	(revision 183913)
+++ include/debug/safe_iterator.h	(working copy)
@@ -380,8 +380,12 @@ 
       bool
       _M_before_dereferenceable() const
       {
-	_Self __it = *this;
-	return __it._M_incrementable() && (++__it)._M_dereferenceable();
+	if (this->_M_incrementable())
+	{
+	  _Iterator __base = base();
+	  return ++__base != _M_get_sequence()->_M_base().end();
+	}
+	return false;
       }
 
       /// Is the iterator incrementable?