// // This file contains the C++ code from Program 4.19 of // "Data Structures and Algorithms // with Object-Oriented Design Patterns in C++" // by Bruno R. Preiss. // // Copyright (c) 1998 by Bruno R. Preiss, P.Eng. All rights reserved. // // http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus4/programs/pgm04_19.cpp // template void LinkedList::InsertAfter ( ListElement const* arg, T const& item) { ListElement* ptr = const_cast*> (arg); if (ptr == 0) throw invalid_argument ("invalid position"); ListElement* const tmp = new ListElement (item, ptr->next); ptr->next = tmp; if (tail == ptr) tail = tmp; } template void LinkedList::InsertBefore ( ListElement const* arg, T const& item) { ListElement* ptr = const_cast*> (arg); if (ptr == 0) throw invalid_argument ("invalid position"); ListElement* const tmp = new ListElement (item, ptr); if (head == ptr) head = tmp; else { ListElement* prevPtr = head; while (prevPtr != 0 && prevPtr->next != ptr) prevPtr = prevPtr->next; if (prevPtr == 0) throw invalid_argument ("invalid position"); prevPtr->next = tmp; } }