summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h')
-rw-r--r--3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h b/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h
new file mode 100644
index 000000000..44c5e8e99
--- /dev/null
+++ b/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_store_TransactionalRAMDirectory_
+#define _lucene_store_TransactionalRAMDirectory_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "RAMDirectory.h"
+#include "CLucene/util/VoidList.h"
+
+CL_NS_DEF(store)
+
+/***
+This transactional in-memory Directory was created to address a specific
+situation, and was deliberately pared down to the simplest viable
+implementation. For the sake of simplicity, this implementation imposes
+restrictions on what operations can be performed in the directory while a
+transaction is in progress (documented in TransactionalRAMDirectory.cpp).
+
+Because the Lucene Directory interface itself is rather simplistic, it
+would not be difficult to expand TransactionalRAMDirectory so that it
+provided fully general transactionality. However, the developer of this
+original implementation was of the opinion that the last thing CLucene
+needs is gratuitous features that exceed their required complexity and
+haven't been rigorously tested.
+*/
+class TransactionalRAMDirectory : public RAMDirectory
+{
+private:
+ typedef CL_NS(util)::CLSet<QString, void*, CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Deletor::DummyQString> FilenameSet;
+ FilenameSet filesToRemoveOnAbort;
+
+ typedef CL_NS(util)::CLSet<QString, RAMFile*, CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Deletor::DummyQString,
+ CL_NS(util)::Deletor::Object<RAMFile> > TransFileMap;
+ TransFileMap filesToRestoreOnAbort;
+
+ bool transOpen;
+
+ void transResolved();
+ bool archiveOrigFileIfNecessary(const QString& name);
+ void unarchiveOrigFile(const QString& name);
+
+protected:
+ bool doDeleteFile(const QString& name);
+
+public:
+ TransactionalRAMDirectory();
+ virtual ~TransactionalRAMDirectory();
+
+ bool transIsOpen() const;
+ void transStart();
+ void transCommit();
+ void transAbort();
+
+ // Constrained operations:
+ void renameFile(const QString& from, const QString& to);
+ IndexOutput* createOutput(const QString& name);
+
+ void close();
+};
+
+CL_NS_END
+
+#endif