summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/htword/WordDead.cc
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htword/WordDead.cc')
-rw-r--r--debian/htdig/htdig-3.2.0b6/htword/WordDead.cc123
1 files changed, 123 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htword/WordDead.cc b/debian/htdig/htdig-3.2.0b6/htword/WordDead.cc
new file mode 100644
index 00000000..ff5e5250
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/htword/WordDead.cc
@@ -0,0 +1,123 @@
+//
+// WordDead.cc
+//
+// Part of the ht://Dig package <http://www.htdig.org/>
+// Copyright (c) 1999-2004 The ht://Dig Group
+// For copyright details, see the file COPYING in your distribution
+// or the GNU Library General Public License (LGPL) version 2 or later
+// <http://www.gnu.org/copyleft/lgpl.html>
+//
+// $Id: WordDead.cc,v 1.4 2004/05/28 13:15:26 lha Exp $
+//
+#ifdef HAVE_CONFIG_H
+#include "htconfig.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <fcntl.h>
+
+#include "WordDead.h"
+#include "WordListOne.h"
+
+class WordDeadCursor {
+public:
+ WordDBCursor* cursor;
+};
+
+WordDead::~WordDead()
+{
+ delete db;
+ delete mask;
+}
+
+int WordDead::Initialize(WordList* nwords)
+{
+ words = nwords;
+ db = new WordDB(nwords->GetContext()->GetDBInfo());
+ mask = new WordKey(words->GetContext());
+ return OK;
+}
+
+int WordDead::Open()
+{
+ const String& filename = words->Filename();
+ int flags = words->Flags();
+
+ db->set_pagesize(words->Pagesize());
+
+ return db->Open(filename, "dead", DB_BTREE, flags, 0666, WORD_DB_DEAD) == 0 ? OK : NOTOK;
+}
+
+int WordDead::Remove()
+{
+ return db->Remove(words->Filename(), "dead") == 0 ? OK : NOTOK;
+}
+
+int WordDead::Close()
+{
+ return db->Close() == 0 ? OK : NOTOK;
+}
+
+int WordDead::Normalize(WordKey& key) const
+{
+ int nfields = words->GetContext()->GetKeyInfo().nfields;
+ int i;
+ //
+ // Undefine in 'key' all fields not defined in 'mask'
+ //
+ for(i = 0; i < nfields; i++) {
+ if(!mask->IsDefined(i))
+ key.Set(i, WORD_KEY_VALUE_INVALID);
+ }
+
+ return OK;
+}
+
+int WordDead::Exists(const WordKey& key) const
+{
+ WordKey tmp_key = key;
+
+ Normalize(tmp_key);
+
+ String coded;
+ String dummy;
+
+ tmp_key.Pack(coded);
+
+ return db->Get(0, coded, dummy, 0) == 0;
+}
+
+int WordDead::Put(const WordKey& key) const
+{
+ WordKey tmp_key = key;
+
+ Normalize(tmp_key);
+
+ String coded;
+ String dummy;
+
+ tmp_key.Pack(coded);
+
+ return db->Put(0, coded, dummy, 0) == 0 ? OK : NOTOK;
+}
+
+WordDeadCursor* WordDead::Cursor() const
+{
+ WordDeadCursor* cursor = new WordDeadCursor;
+ cursor->cursor = db->Cursor();
+
+ return cursor;
+}
+
+int WordDead::Next(WordDeadCursor* cursor, WordKey& key)
+{
+ String coded;
+ String dummy;
+ int ret = cursor->cursor->Get(coded, dummy, DB_NEXT);
+ if(ret != 0) {
+ delete cursor->cursor;
+ delete cursor;
+ } else {
+ key.Unpack(coded);
+ }
+ return ret;
+}