00001 // Link.cpp - Single-Link Class Implementation 00002 #include "Link.hpp" 00003 00004 // This creates space for the freelist variable 00005 Link* Link::freelist = NULL; 00006 00007 Link::Link() { 00008 next = NULL; 00009 } 00010 00011 Link::Link( Link& link ) { // Copy Constructor 00012 element = new DBase( *link.element ); 00013 next = NULL; 00014 } 00015 00016 Link::Link(Link* nextp ) { // Default Empty Constructor 00017 next = nextp; 00018 } 00019 00020 Link::Link(DBase* Elemval) { // With an element and no ptr 00021 element = Elemval; 00022 next = NULL; 00023 } 00024 00025 Link::Link(DBase* Elemval, Link* nextp) { // With an element and next ptr 00026 element = Elemval; 00027 next = nextp; 00028 } 00029 00030 // Redefine NEW and DELETE so we use a FreeList if possible... 00031 void* Link::operator new(size_t) { // Overload new 00032 if (freelist == NULL) // Create new space 00033 return ::new Link; 00034 00035 Link* temp = freelist; // Otherwise, get from freelist 00036 freelist = freelist->next; 00037 return temp; // Return the link node 00038 } 00039 00040 void Link::operator delete(void* ptr) { // Overload delete 00041 ((Link*)ptr)->next = freelist; // Put on freelist 00042 freelist = (Link*)ptr; 00043 } 00044