From c1b6ffe70bd281c6c230fd63fabcaac2aff47514 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 7 Apr 2024 23:18:32 -0700 Subject: feat: initial commit --- chapter7/stack2.template | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 chapter7/stack2.template (limited to 'chapter7/stack2.template') diff --git a/chapter7/stack2.template b/chapter7/stack2.template new file mode 100644 index 0000000..e02d827 --- /dev/null +++ b/chapter7/stack2.template @@ -0,0 +1,59 @@ +// FILE: stack2.template +// TEMPLATE CLASS IMPLEMENTED: stack (see stack2.h for documentation) +// This file is included in the header file, and not compiled separately. +// INVARIANT for the stack class: +// 1. The items in the stack are stored in a linked list, with the top of the +// stack stored at the head node, down to the bottom of the stack at the +// final node. +// 2. The member variable top_ptr is the head pointer of the linked list. + +#include // Provides assert +#include "node2.h" // Node template class + +namespace main_savitch_7B +{ + template + stack::stack(const stack& source) + // Library facilities used: node2.h + { + main_savitch_6B::node *tail_ptr; // Needed for argument of list_copy + + list_copy(source.top_ptr, top_ptr, tail_ptr); + } + + template + void stack::push(const Item& entry) + // Library facilities used: node2.h + { + list_head_insert(top_ptr, entry); + } + + template + void stack::pop( ) + // Library facilities used: cassert, node2.h + { + assert(!empty( )); + list_head_remove(top_ptr); + } + + template + void stack::operator =(const stack& source) + // Library facilities used: node2.h + { + main_savitch_6B::node *tail_ptr; // Needed for argument of list_copy + + if (this == &source) // Handle self-assignment + return; + + list_clear(top_ptr); + list_copy(source.top_ptr, top_ptr, tail_ptr); + } + + template + Item stack::top( ) const + // Library facilities used: cassert + { + assert(!empty( )); + return top_ptr->data( ); + } +} -- cgit v1.2.3