Switch to side-by-side view

--- a/src/rcldb/stemdb.h
+++ b/src/rcldb/stemdb.h
@@ -54,24 +54,37 @@
 
 #include <xapian.h>
 
+#include "synfamily.h"
+
 namespace Rcl {
-namespace StemDb {
 
-/// Get languages of existing stem databases
-extern std::vector<std::string> getLangs(Xapian::Database& xdb);
+class StemDb : public XapSynFamily {
+public:
+    StemDb(Xapian::Database& xdb)
+	: XapSynFamily(xdb, synFamStem)
+    {
+    }
 
-/// Delete stem database for given language
-extern bool deleteDb(Xapian::WritableDatabase&, const std::string& lang);
+    /** Expand for a number of languages */
+    bool stemExpand(const std::string& langs,
+		     const std::string& term,
+		     std::vector<std::string>& result);
+private:
+    /** Compute stem and call synExpand() */
+    bool expandOne(const std::string& lang,
+		   const std::string& term,
+		   std::vector<std::string>& result);
+};
 
-/// Create stem database for given language
-extern bool createDb(Xapian::WritableDatabase&, const std::string& lang);
+class WritableStemDb : public XapWritableSynFamily {
+public:
+    WritableStemDb(Xapian::WritableDatabase& xdb)
+	: XapWritableSynFamily(xdb, synFamStem)
+    {
+    }
+    bool createDb(const std::string& lang);
+};
 
-/// Expand term to stem siblings
-extern bool stemExpand(Xapian::Database& xdb,
-		       const std::string& lang,
-		       const std::string& term,
-		       std::vector<std::string>& result);
-}
 }
 
 #endif /* _STEMDB_H_INCLUDED_ */