diff algs4-c++/src/Deque.cpp @ 18:a149b424b4e2

Updated all template classes to have the implementaiton in the header file.
author Eris Caffee <discordia@eldalin.com>
date Sat, 20 Jun 2015 19:36:11 -0500
parents 1e3c509b6ac4
children
line diff
     1.1 --- a/algs4-c++/src/Deque.cpp	Fri Jun 19 18:18:47 2015 -0500
     1.2 +++ b/algs4-c++/src/Deque.cpp	Sat Jun 20 19:36:11 2015 -0500
     1.3 @@ -1,170 +1,8 @@
     1.4 -// g++ -D DEQUE_MAIN -std=c++0x Deque.cpp
     1.5 -// g++ -D DEQUE_MAIN -std=c++11 Deque.cpp
     1.6 +// g++ -std=c++11 Deque.cpp
     1.7  
     1.8  
     1.9  #include "Deque.hpp"
    1.10  
    1.11 -#include <cassert>
    1.12 -#include <cstddef>
    1.13 -
    1.14 -#include <iostream>
    1.15 -
    1.16 -template <typename T>
    1.17 -Deque<T>::Deque( void ) :
    1.18 -    N (0),
    1.19 -    first (nullptr),
    1.20 -    last (nullptr)
    1.21 -    {
    1.22 -    }
    1.23 -    
    1.24 -template <typename T>
    1.25 -Deque<T>::~Deque( void ) {
    1.26 -    assert( N == 0 );  // Catch the potential memory leak.
    1.27 -    while ( first ) {
    1.28 -        Node *next = first->next;
    1.29 -        delete first;
    1.30 -        first = next;
    1.31 -        }
    1.32 -    }
    1.33 -
    1.34 -template <typename T>
    1.35 -void Deque<T>::push_right( T &item ) {
    1.36 -    Node * node = new Node();
    1.37 -    node->item = item;
    1.38 -    node->next = nullptr;
    1.39 -    node->prev = nullptr;
    1.40 -
    1.41 -    if ( last ) {
    1.42 -        last->next = node;
    1.43 -        node->prev = last;
    1.44 -        last = node;
    1.45 -        }
    1.46 -    else {
    1.47 -        last = first = node;
    1.48 -        }
    1.49 -
    1.50 -    N++;
    1.51 -    }
    1.52 -
    1.53 -template <typename T>
    1.54 -void Deque<T>::push_left( T &item ) {
    1.55 -    Node * node = new Node();
    1.56 -    node->item = item;
    1.57 -    node->next = nullptr;
    1.58 -    node->prev = nullptr;
    1.59 -
    1.60 -    if ( first ) {
    1.61 -        node->next = first;
    1.62 -        first->prev = node;
    1.63 -        first = node;
    1.64 -        }
    1.65 -    else {
    1.66 -        last = first = node;
    1.67 -        }
    1.68 -
    1.69 -    N++;
    1.70 -    }
    1.71 -
    1.72 -template <typename T>
    1.73 -T Deque<T>::pop_left( void ) {
    1.74 -    assert( N > 0 );
    1.75 -
    1.76 -    T item = first->item;
    1.77 -
    1.78 -    Node *old = first;
    1.79 -    if ( first->next )
    1.80 -        first->next->prev = nullptr;
    1.81 -    first = first->next;
    1.82 -    delete old;
    1.83 -    N--;
    1.84 -
    1.85 -    if ( ! first )
    1.86 -        last = nullptr;
    1.87 -
    1.88 -    return item;
    1.89 -    }
    1.90 -
    1.91 -template <typename T>
    1.92 -T Deque<T>::pop_right( void ) {
    1.93 -    assert( N > 0 );
    1.94 -
    1.95 -    T item = last->item;
    1.96 -
    1.97 -    Node *old = last;
    1.98 -    if ( last->prev )
    1.99 -        last->prev->next = nullptr;
   1.100 -    last = last->prev;
   1.101 -    delete old;
   1.102 -    N--;
   1.103 -
   1.104 -    if ( ! last )
   1.105 -        first = nullptr;
   1.106 -
   1.107 -    return item;
   1.108 -    }
   1.109 -
   1.110 -template <typename T>
   1.111 -bool Deque<T>::is_empty( void ) {
   1.112 -    return N == 0;
   1.113 -    }
   1.114 -
   1.115 -template <typename T>
   1.116 -size_t Deque<T>::size( void ) {
   1.117 -    return N;
   1.118 -    }
   1.119 -
   1.120 -template <typename T>
   1.121 -typename Deque<T>::iterator Deque<T>::begin( void ) {
   1.122 -    return Deque<T>::iterator( first );
   1.123 -    }
   1.124 -
   1.125 -template <typename T>
   1.126 -typename Deque<T>::iterator Deque<T>::end( void ) {
   1.127 -    return Deque<T>::iterator( nullptr );
   1.128 -    }
   1.129 -
   1.130 -
   1.131 -////////////////////////////////////////////////////////////////////////////////
   1.132 -
   1.133 -template <typename T>
   1.134 -Deque<T>::iterator::iterator( Node *c ) :
   1.135 -    curr (c)
   1.136 -    {
   1.137 -    }
   1.138 -
   1.139 -template <typename T>
   1.140 -typename Deque<T>::iterator & Deque<T>::iterator::operator++() {
   1.141 -    if ( this->curr != nullptr ) {
   1.142 -        this->curr = this->curr->next;
   1.143 -        }
   1.144 -    return *this;
   1.145 -    }
   1.146 -
   1.147 -template <typename T>
   1.148 -typename Deque<T>::iterator Deque<T>::iterator::operator++( int ) {
   1.149 -    auto t = Deque<T>::iterator( *this );
   1.150 -
   1.151 -    if ( this->curr != nullptr ) {
   1.152 -        this->curr = this->curr->next;
   1.153 -        }
   1.154 -    return t;
   1.155 -    }
   1.156 -
   1.157 -template <typename T>
   1.158 -T Deque<T>::iterator::operator*() {
   1.159 -    return this->curr->item;
   1.160 -    }
   1.161 -
   1.162 -template <typename T>
   1.163 -bool Deque<T>::iterator::operator!=( typename Deque<T>::iterator other ) {
   1.164 -    return this->curr != other.curr;
   1.165 -    }
   1.166 -
   1.167 -
   1.168 -////////////////////////////////////////////////////////////////////////////////
   1.169 -
   1.170 -#ifdef DEQUE_MAIN
   1.171 -
   1.172  #include <iostream>
   1.173  
   1.174  int main ( int argc, char **argv ) {
   1.175 @@ -211,5 +49,3 @@
   1.176      std::cout << "Deque has " << deque.size() << " entries." << std::endl;
   1.177  
   1.178      }
   1.179 -
   1.180 -#endif