summaryrefslogtreecommitdiff
path: root/soltools/ldump/hashtbl.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'soltools/ldump/hashtbl.hxx')
-rw-r--r--soltools/ldump/hashtbl.hxx113
1 files changed, 113 insertions, 0 deletions
diff --git a/soltools/ldump/hashtbl.hxx b/soltools/ldump/hashtbl.hxx
new file mode 100644
index 000000000000..b3aa621dcb21
--- /dev/null
+++ b/soltools/ldump/hashtbl.hxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _HASHTBL_HXX
+#define _HASHTBL_HXX
+
+// ADT hash table
+//
+// Invariante:
+// 1. m_lElem < m_lSize
+// 2. die Elemente in m_Array wurden double-hashed erzeugt
+//
+class HashItem;
+
+class HashTable
+{
+ unsigned long m_lSize;
+ unsigned long m_lElem;
+ HashItem *m_pData;
+ double m_dMaxLoadFactor;
+ double m_dGrowFactor;
+ bool m_bOwner;
+
+ unsigned long Hash(const char *cKey) const;
+ unsigned long DHash(const char *cKey , unsigned long lHash) const;
+ unsigned long Probe(unsigned long lPos) const;
+
+ HashItem* FindPos(const char *cKey) const;
+ void SmartGrow();
+ double CalcLoadFactor() const;
+
+protected:
+ friend class HashTableIterator;
+
+ virtual void OnDeleteObject(void* pObject);
+
+ void* GetObjectAt(unsigned long lPos) const;
+
+// Default-Werte
+public:
+ static double m_defMaxLoadFactor;
+ static double m_defDefGrowFactor;
+
+public:
+ HashTable
+ (
+ unsigned long lSize,
+ bool bOwner,
+ double dMaxLoadFactor = HashTable::m_defMaxLoadFactor /* 0.8 */,
+ double dGrowFactor = HashTable::m_defDefGrowFactor /* 2.0 */
+ );
+
+ virtual ~HashTable();
+
+ bool IsFull() const;
+ unsigned long GetSize() const { return m_lSize; }
+
+ void* Find (const char *cKey ) const;
+ bool Insert (const char *cKey , void* pObject);
+ void* Delete (const char *cKey);
+};
+
+// ADT hash table iterator
+//
+// Invariante: 0 <= m_lAt < m_aTable.GetCount()
+//
+class HashTableIterator
+{
+ unsigned long m_lAt;
+ HashTable const& m_aTable;
+
+ void operator =(HashTableIterator &); // not defined
+
+ void* FindValidObject(bool bForward);
+
+protected:
+ void* GetFirst(); // Interation _ohne_ Sortierung
+ void* GetNext();
+ void* GetLast();
+ void* GetPrev();
+
+public:
+ HashTableIterator(HashTable const&);
+};
+
+#endif // _HASHTBL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */