00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef OM_HGUARD_BACKENDMANAGER_H
00023 #define OM_HGUARD_BACKENDMANAGER_H
00024
00025 #include <xapian.h>
00026 #include <vector>
00027
00028
00029 #ifdef __WIN32__
00030
00031
00032 # ifdef _MSC_VER
00033 # ifdef DEBUG
00034 # define XAPIAN_BIN_PATH "..\\win32\\Debug\\"
00035 # else
00036 # define XAPIAN_BIN_PATH "..\\win32\\Release\\"
00037 # endif
00038 # else
00039 # define XAPIAN_BIN_PATH "..\\bin\\" // mingw
00040 # endif
00041 #else
00042 # define XAPIAN_BIN_PATH "../bin/"
00043 #endif
00044 #define XAPIAN_TCPSRV XAPIAN_BIN_PATH"xapian-tcpsrv"
00045 #define XAPIAN_PROGSRV XAPIAN_BIN_PATH"xapian-progsrv"
00046
00047 #if defined __SUNPRO_CC && __SUNPRO_CC - 0 < 0x580
00048
00049 class Xapian::WritableDatabase;
00050 #endif
00051
00052 class BackendManager {
00054 std::string datadir;
00055
00057 void index_files_to_database(Xapian::WritableDatabase & database,
00058 const std::vector<std::string> & files);
00059
00060 protected:
00061 bool create_dir_if_needed(const std::string &dirname);
00062
00069 virtual Xapian::Database do_get_database(const std::vector<std::string> &files);
00070
00077 virtual std::string do_get_database_path(const std::vector<std::string> &files);
00078
00079 #ifdef XAPIAN_HAS_INMEMORY_BACKEND
00081 Xapian::WritableDatabase getwritedb_inmemory(const std::vector<std::string> &files);
00082 #endif
00083
00084 #ifdef XAPIAN_HAS_REMOTE_BACKEND
00086 Xapian::Database getdb_remoteprog(const std::vector<std::string> &files);
00087
00089 Xapian::WritableDatabase getwritedb_remoteprog(const std::vector<std::string> &files);
00090
00092 Xapian::Database getdb_remotetcp(const std::vector<std::string> &files);
00093
00095 Xapian::WritableDatabase getwritedb_remotetcp(const std::vector<std::string> &files);
00096 #endif
00097
00098 #ifdef XAPIAN_HAS_BRASS_BACKEND
00099 protected:
00100 std::string createdb_brass(const std::vector<std::string> &files);
00101
00102 public:
00104 Xapian::WritableDatabase getwritedb_brass(const std::string & name,
00105 const std::vector<std::string> &files);
00106
00108 std::string getwritedb_brass_path(const std::string & name);
00109 #endif
00110
00111 #ifdef XAPIAN_HAS_CHERT_BACKEND
00112 protected:
00113 std::string createdb_chert(const std::vector<std::string> &files);
00114
00115 public:
00117 Xapian::WritableDatabase getwritedb_chert(const std::string & name,
00118 const std::vector<std::string> &files);
00119
00121 std::string getwritedb_chert_path(const std::string & name);
00122 #endif
00123
00124 #ifdef XAPIAN_HAS_FLINT_BACKEND
00125 protected:
00126 std::string createdb_flint(const std::vector<std::string> &files);
00127
00128 public:
00130 Xapian::WritableDatabase getwritedb_flint(const std::string & name,
00131 const std::vector<std::string> &files);
00132
00134 std::string getwritedb_flint_path(const std::string & name);
00135 #endif
00136
00137 public:
00139 BackendManager() { }
00140
00144 virtual ~BackendManager();
00145
00148 virtual std::string get_dbtype() const;
00149
00152 void set_datadir(const std::string &datadir_) { datadir = datadir_; }
00153
00156 const std::string & get_datadir() const { return datadir; }
00157
00159 Xapian::Database get_database(const std::vector<std::string> &files);
00160
00162 Xapian::Database get_database(const std::string &file);
00163
00173 Xapian::Database get_database(const std::string &dbname,
00174 void (*gen)(Xapian::WritableDatabase&,
00175 const std::string &),
00176 const std::string &arg);
00177
00179 std::string get_database_path(const std::vector<std::string> &files);
00180
00182 std::string get_database_path(const std::string &file);
00183
00185 std::string get_database_path(const std::string &dbname,
00186 void (*gen)(Xapian::WritableDatabase&,
00187 const std::string &),
00188 const std::string &arg);
00189
00191 virtual Xapian::WritableDatabase get_writable_database(const std::string & name, const std::string & file);
00192
00194 virtual std::string get_writable_database_path(const std::string & name);
00195
00197 virtual Xapian::Database get_remote_database(const std::vector<std::string> & files, unsigned int timeout);
00198
00200 virtual Xapian::Database get_writable_database_as_database();
00201
00203 virtual Xapian::WritableDatabase get_writable_database_again();
00204
00209 virtual void clean_up();
00210
00212 static const char * get_xapian_progsrv_command();
00213 };
00214
00215 #endif