diff options
| author | Fuwn <[email protected]> | 2024-04-07 23:18:32 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-04-07 23:18:32 -0700 |
| commit | c1b6ffe70bd281c6c230fd63fabcaac2aff47514 (patch) | |
| tree | e8af3b1782a7cd0754590ed618fddc1bdb9b7385 /chapter12/table2.h | |
| download | dscode-c1b6ffe70bd281c6c230fd63fabcaac2aff47514.tar.xz dscode-c1b6ffe70bd281c6c230fd63fabcaac2aff47514.zip | |
Diffstat (limited to 'chapter12/table2.h')
| -rw-r--r-- | chapter12/table2.h | 82 |
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 |