summaryrefslogtreecommitdiff
path: root/chapter12/table2.h
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-04-07 23:18:32 -0700
committerFuwn <[email protected]>2024-04-07 23:18:32 -0700
commitc1b6ffe70bd281c6c230fd63fabcaac2aff47514 (patch)
treee8af3b1782a7cd0754590ed618fddc1bdb9b7385 /chapter12/table2.h
downloaddscode-main.tar.xz
dscode-main.zip
feat: initial commitHEADmain
Diffstat (limited to 'chapter12/table2.h')
-rw-r--r--chapter12/table2.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/chapter12/table2.h b/chapter12/table2.h
new file mode 100644
index 0000000..b249990
--- /dev/null
+++ b/chapter12/table2.h
@@ -0,0 +1,82 @@
+// FILE: table2.h
+// TEMPLATE CLASS PROVIDED: Table<RecordType>
+// This class is a container template class for a Table of records.
+// The template parameter, RecordType, is the data type of the records in the
+// Table. It may any type with a default constructor, a copy constructor,
+// an assignment operator, and an integer member variable called key.
+//
+// CONSTRUCTOR for the Table<RecordType> template class:
+// Table( )
+// Postcondition: The Table has been initialized as an empty Table.
+//
+// MODIFICATION MEMBER FUNCTIONS for the Table<RecordType> class:
+// void insert(const RecordType& entry)
+// Precondition: entry.key >= 0. Also if entry.key is not already a key in
+// the table, then the Table has space for another record
+// (i.e., size( ) < CAPACITY).
+// Postcondition: If the table already had a record with a key equal to
+// entry.key, then that record is replaced by entry. Otherwise, entry has
+// been added as a new record of the Table.
+//
+// void remove(int key)
+// Postcondition: If a record was in the Table with the specified key, then
+// that record has been removed; otherwise the table is unchanged.
+//
+// CONSTANT MEMBER FUNCTIONS for the Table<RecordType> class:
+// bool is_present(const Item& target) const
+// Postcondition: The return value is true if there is a record in the
+// Table with the specified key. Otherwise, the return value is false.
+//
+// void find(int key, bool& found, RecordType& result) const
+// Postcondition: If a record is in the Table with the specified key, then
+// found is true and result is set to a copy of the record with that key.
+// Otherwise found is false and the result contains garbage.
+//
+// size_t size( ) const
+// Postcondition: Return value is the total number of records in the
+// Table.
+//
+// VALUE SEMANTICS for the Table<RecordType> template class:
+// Assignments and the copy constructor may be used with Table objects.
+//
+// DYNAMIC MEMORY USAGE by the Table<RecordType> template class:
+// If there is insufficient dynamic memory, then the following functions
+// can call new_handler: the copy constructor, insert, the assignment
+// operator.
+
+#ifndef TABLE2_H
+#define TABLE2_H
+#include <cstdlib> // Provides size_t
+#include "node2.h" // Provides the node type, from Figure 6.5 on page 306
+
+namespace main_savitch_12B
+{
+ template <class RecordType>
+ class table
+ {
+ public:
+ // MEMBER CONSTANT -- See Appendix E if this fails to compile.
+ static const std::size_t TABLE_SIZE = 811;
+ // CONSTRUCTORS AND DESTRUCTOR
+ table( );
+ table(const table& source);
+ ~table( );
+ // MODIFICATION MEMBER FUNCTIONS
+ void insert(const RecordType& entry);
+ void remove(int key);
+ void operator =(const table& source);
+ // CONSTANT MEMBER FUNCTIONS
+ void find(int key, bool& found, RecordType& result) const;
+ bool is_present(int key) const;
+ std::size_t size( ) const { return total_records; }
+ private:
+ main_savitch_6B::node<RecordType> *data[TABLE_SIZE];
+ std::size_t total_records;
+ // HELPER MEMBER FUNCTION
+ std::size_t hash(int key) const;
+ };
+}
+
+#include "table2.template" // Include the implementation
+
+#endif