Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Tpetra_HashTable_decl.hpp
1/*
2// @HEADER
3// ***********************************************************************
4//
5// Tpetra: Templated Linear Algebra Services Package
6// Copyright (2008) Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39//
40// ************************************************************************
41// @HEADER
42*/
43
44#ifndef TPETRA_HASHTABLE_DECL_HPP
45#define TPETRA_HASHTABLE_DECL_HPP
46
47#include <Teuchos_Describable.hpp>
48#include "Tpetra_ConfigDefs.hpp"
49
50namespace Tpetra {
51namespace Details {
52
65template<typename KeyType, typename ValueType>
66class HashTable : public Teuchos::Describable {
68 struct Node {
69 KeyType Key;
70 ValueType Value;
71 Node * Ptr;
72
73 Node (const KeyType key = 0, const ValueType value = 0, Node * ptr = NULL)
74 : Key(key), Value(value), Ptr(ptr) {}
75
76 private:
77 Node (const Node& src) : Key(src.Key), Value(src.Value), Ptr(src.Ptr) {}
78
79 Node& operator= (const Node& src) {
80 // We may safely omit the usual check for this == &src.
81 Key = src.Key;
82 Value = src.Value;
83 Ptr = src.Ptr;
84 return *this;
85 }
86 };
87
88 Node ** Container_;
89 KeyType Size_;
90 unsigned int Seed_;
91#ifdef HAVE_TPETRA_DEBUG
92 int maxc_; // Max size of the list among all entries w/ collisions. debug only.
93 int nc_; // Number of entries with collisions; use only in debug mode.
94#endif // HAVE_TPETRA_DEBUG
95
98 int hashFunc( const KeyType key );
99
100 int getRecommendedSize( const int size );
101
102public:
109 HashTable (const int size, const unsigned int seed = (2654435761U));
110
111 HashTable (const HashTable& obj);
112 ~HashTable();
113
115 void add (const KeyType key, const ValueType value);
116
118 ValueType get (const KeyType key);
119
121
122
123 std::string description() const;
124
126 void
127 describe (Teuchos::FancyOStream &out,
128 const Teuchos::EVerbosityLevel verbLevel=
129 Teuchos::Describable::verbLevel_default) const;
131
132private:
135 operator= (const HashTable<KeyType,ValueType>& source);
136};
137
138} // Details namespace
139
140} // Tpetra namespace
141
142#endif
ValueType get(const KeyType key)
Get the value corresponding to the given key.
std::string description() const
Implementation of Teuchos::Describable.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print this object with the given verbosity to the output stream.
void add(const KeyType key, const ValueType value)
Add a key and its value to the hash table.
Implementation details of Tpetra.
Namespace Tpetra contains the class and methods constituting the Tpetra library.