$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: chintanraoh_at_[hidden]
Date: 2008-06-02 15:22:51
Author: chintanraoh
Date: 2008-06-02 15:22:50 EDT (Mon, 02 Jun 2008)
New Revision: 46053
URL: http://svn.boost.org/trac/boost/changeset/46053
Log:
changed return type of  find(const key_type &) from bool to iterator
Text files modified: 
   sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/trie.hpp |    50 +++++++++++++++++++++++++++++++-------- 
   1 files changed, 39 insertions(+), 11 deletions(-)
Modified: sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/trie.hpp
==============================================================================
--- sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/trie.hpp	(original)
+++ sandbox/SOC/2008/digital_searching/dsearch/boost/dsearch/trie.hpp	2008-06-02 15:22:50 EDT (Mon, 02 Jun 2008)
@@ -8,6 +8,7 @@
 #include<assert.h>
 #include<boost/dsearch/node_cursor.hpp>
 #include<boost/dsearch/trie_iterator.hpp>
+#include<vector>
 
 namespace boost{
 namespace dsearch{
@@ -44,6 +45,8 @@
         
         typedef trie_cursor<key_type,data_type,node_type> cursor;
         typedef trie_iterator<key_type,data_type,cursor> iterator;
+//	typedef trie_cursor<key_type,data_type,node_type> cursor;
+	typedef trie_iterator<key_type,const data_type,cursor> const_iterator;
 
         trie()
         {
@@ -130,26 +133,31 @@
                 node_allocator.deallocate(cur,1);		
         }
 
-	bool find(const key_type &key) const //make this iterator instead of bool;
+	iterator find(const key_type &key) const //make this iterator instead of bool;
         {
                 typename Key_traits::const_iterator it=Key_traits::begin(key),
                                         end_it=Key_traits::end(key);
-		typename node_type::iterator fit;
-		node_type *cur=node_root;
+		std::vector<cursor> cur_st;
+		cursor cur,next;
+		cur=root();
                 while(!(it==end_it))
                 {
-			fit=cur->find(*it);
-			if(fit == cur->end() ) return false;
-			cur=*fit;
+			cur_st.push_back(cur);
+			next=cur.find(*it);
+			if( next == cur.end() ) return end();
+			cur=next;
                         it++;
                 }
+		cur_st.push_back(cur);
                 if(cur->has_value())
                 {
-			return true;
+			return iterator(cur_st.begin(),cur_st.end());
                 }
-		return false;
+		return end();
         }
 
+
+
         void swap(const type &other)
         {
                 std::swap(other.node_root,node_root);
@@ -184,16 +192,17 @@
                 new(node_root) node_type();
         }
 
-	iterator begin()
+	iterator begin() const
         {
                 return iterator(root(),false);
         }
 
-	iterator end()
+	iterator end() const
         {
                 return iterator(root(),true);
         }
-	cursor root()
+
+	cursor root() const
         {
                 return cursor(node_root);
         }
@@ -237,6 +246,25 @@
                 }
                 return cur;
         }
+	bool exist(const key_type &key) const //make this iterator instead of bool;
+	{
+		typename Key_traits::const_iterator it=Key_traits::begin(key),
+					end_it=Key_traits::end(key);
+		typename node_type::iterator fit;
+		node_type *cur=node_root;
+		while(!(it==end_it))
+		{
+			fit=cur->find(*it);
+			if(fit == cur->end() ) return false;
+			cur=*fit;
+			it++;
+		}
+		if(cur->has_value())
+		{
+			return true;
+		}
+		return false;
+	}
 };
 
 }