|
Boost-Commit : |
From: chintanraoh_at_[hidden]
Date: 2008-06-20 14:45:02
Author: chintanraoh
Date: 2008-06-20 14:45:02 EDT (Fri, 20 Jun 2008)
New Revision: 46568
URL: http://svn.boost.org/trac/boost/changeset/46568
Log:
to_left_most and to_right_most
Text files modified:
sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/patricia_iterator.hpp | 69 +++++++++++++++++++++++++++++++--------
1 files changed, 55 insertions(+), 14 deletions(-)
Modified: sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/patricia_iterator.hpp
==============================================================================
--- sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/patricia_iterator.hpp (original)
+++ sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/patricia_iterator.hpp 2008-06-20 14:45:02 EDT (Fri, 20 Jun 2008)
@@ -11,31 +11,39 @@
:public iterator_facade< patricia_iterator<Value_type,Node_type, Alloc>,
Value_type, bidirectional_traversal_tag >
{
+ template<class K,class M,class K_t,class A > friend class patricia;
protected:
struct enabler {};
friend class boost::iterator_core_access;
Node_type *cur;
Node_type *next;
- void increment()
+ virtual void increment()
{
- if (cur == 0 ) return;
- while ( cur && ( cur->right==next || cur->right==0) )
+ if (cur)
{
- next=cur;
- cur=cur->par;
+ while ( cur && ( cur->right==next || cur->right==0) )
+ {
+ next=cur;
+ cur=cur->par;
+ }
+ if ( cur == 0) return; //reached end()
+ next=cur->right; //cur->right!=0
+ }
+ else
+ {
+ cur=next;
+ next=(cur->left)?cur->left:cur->right;
}
- if ( cur == 0) return; //reached end()
- next=cur->right; //cur->right!=0
+
while ( next && next->index > cur->index )
{
cur=next;
- next=cur->left;
- if ( next == 0 ) next=cur->right;
+ next=cur->left?cur->left:cur->right;
}
}
- void decrement()
+ virtual void decrement()
{
if(cur)
{
@@ -45,7 +53,11 @@
cur=cur->par;
}
if(cur==0)
+ {
+ //assert(false);
+ //std::cout<<"Reached before begin"<<std::endl;
return;
+ }
next=cur->left;
}
else
@@ -57,8 +69,7 @@
while ( next && next->index > cur->index )
{
cur=next;
- next=cur->right;
- if ( next == 0 ) next=cur->left;
+ next=cur->right?cur->right:next=cur->left;
}
}
@@ -81,6 +92,30 @@
return false;
}
+ private:
+ void to_right_most()
+ {
+ assert(cur);
+ while(next->par==cur)
+ {
+ cur=next;
+ next=cur->right?cur->right:cur->left;
+ }
+ }
+
+ private:
+ void to_left_most()
+ {
+ assert(cur);
+ while(next->par==cur)
+ {
+ cur=next;
+ next=cur->left?cur->left:cur->right;
+ //std::cout<<"To left most"<<cur->value.first<<"<-"<<next->value.first<<std::endl;
+ }
+ std::cout<<"To left most"<<cur->value.first<<"<-"<<next->value.first<<std::endl;
+ }
+
public:
patricia_iterator() : cur(0),next(0)
{
@@ -131,6 +166,7 @@
class patricia_reverse_iterator:
public patricia_iterator<Value_type, Node_type, Alloc>
{
+ friend class patricia_iterator<Value_type, Node_type, Alloc>;
typedef patricia_iterator<Value_type, Node_type, Alloc> forward_type;
private:
struct enabler {};
@@ -144,6 +180,7 @@
forward_type::decrement();
}
+
template<class V,class N,class A>
bool equal(patricia_reverse_iterator<V,N,A> const &other,
typename enable_if< is_convertible<V*,Value_type*>,
@@ -152,6 +189,7 @@
{
if ( forward_type::cur == other.cur && forward_type::next == other.next )
return true;
+
return false;
}
@@ -159,12 +197,14 @@
{
return forward_type::dereference();
}
+
public:
patricia_reverse_iterator(): forward_type()
{
}
+
patricia_reverse_iterator(Node_type *found,Node_type*prev)
- : forward_type(found,prev)
+ :forward_type(found,prev)
{
}
@@ -174,9 +214,10 @@
forward_type::next=root;
if(start)
{
- decrement();
+ forward_type::decrement(); //rbegin()=end()-1
}
}
+
template<class V,class N,class A>
patricia_reverse_iterator ( patricia_reverse_iterator<V,N,A> const& other,
typename enable_if< is_convertible<V*,Value_type*>,
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk