Switch to side-by-side view

--- a/src/rcldb/stemdb.cpp
+++ b/src/rcldb/stemdb.cpp
@@ -1,5 +1,5 @@
 #ifndef lint
-static char rcsid[] = "@(#$Id: stemdb.cpp,v 1.5 2006-10-09 16:37:08 dockes Exp $ (C) 2005 J.F.Dockes";
+static char rcsid[] = "@(#$Id: stemdb.cpp,v 1.6 2006-12-19 12:11:21 dockes Exp $ (C) 2005 J.F.Dockes";
 #endif
 
 /**
@@ -206,13 +206,24 @@
     return true;
 }
 
+static string stringlistdisp(const list<string>& sl)
+{
+    string s;
+    for (list<string>::const_iterator it = sl.begin(); it!= sl.end(); it++)
+	s += "[" + *it + "] ";
+    if (!s.empty())
+	s.erase(s.length()-1);
+    return s;
+}
+
 /**
  * Expand term to list of all terms which stem to the same term.
  */
-list<string> stemExpand(const string& dbdir, const string& lang,
-			const string& term)
-{
-    list<string> explist;
+bool stemExpand(const std::string& dbdir, 
+		const std::string& lang,
+		const std::string& term,
+		list<string>& result)
+{
     try {
 	Xapian::Stem stemmer(lang);
 	string stem = stemmer.stem_word(term);
@@ -224,14 +235,14 @@
 		stemdbdir.c_str(), sdb.get_lastdocid()));
 	if (!sdb.term_exists(stem)) {
 	    LOGDEB1(("Db::stemExpand: no term for %s\n", stem.c_str()));
-	    explist.push_back(term);
-	    return explist;
+	    result.push_back(term);
+	    return true;
 	}
 	Xapian::PostingIterator did = sdb.postlist_begin(stem);
 	if (did == sdb.postlist_end(stem)) {
 	    LOGDEB1(("stemExpand: no term(1) for %s\n",stem.c_str()));
-	    explist.push_back(term);
-	    return explist;
+	    result.push_back(term);
+	    return true;
 	}
 	Xapian::Document doc = sdb.get_document(*did);
 	string data = doc.get_data();
@@ -242,25 +253,25 @@
 	++pos;
 	string::size_type pos1 = data.find_last_of("\n");
 	if (pos == string::npos || pos1 == string::npos ||pos1 <= pos) { // ??
-	    explist.push_back(term);
-	    return explist;
-	}
-	stringToStrings(data.substr(pos, pos1-pos), explist);
+	    result.push_back(term);
+	    return true;
+	}
+	stringToStrings(data.substr(pos, pos1-pos), result);
 
 	// If the user term itself is not in the list, add it.
-	if (find(explist.begin(), explist.end(), term) == explist.end()) {
-	    explist.push_back(term);
+	if (find(result.begin(), result.end(), term) == result.end()) {
+	    result.push_back(term);
 	}
 	LOGDEB(("stemExpand: %s ->  %s\n", stem.c_str(),
-		stringlistdisp(explist).c_str()));
+		stringlistdisp(result).c_str()));
     } catch (...) {
 	LOGERR(("stemExpand: error accessing stem db. dbdir [%s] lang [%s]\n",
 		dbdir.c_str(), lang.c_str()));
-	explist.push_back(term);
-	return explist;
-    }
-    return explist;
-}
-
-}
-}
+	result.push_back(term);
+	return false;
+    }
+    return true;
+}
+
+}
+}