Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/general/evaluation/cpp-stack.hpp

    r81e8ab0 rf86c8e5  
    22#include <utility>
    33
    4 template<typename T> struct stack {
     4template<typename T> class stack {
    55        struct node {
    66                T value;
    7                 node * next;
    8                 node( const T & v, node * n = nullptr ) : value( v ), next( n ) {}
     7                node* next;
     8
     9                node( const T& v, node* n = nullptr ) : value(v), next(n) {}
    910        };
    10         node * head;
     11        node* head;
    1112
    12         stack() : head( nullptr ) {}
    13         stack( const stack<T> & o) { copy( o ); }
    14         stack( stack<T> && o ) : head( o.head ) { o.head = nullptr; }
    15 
    16         void copy( const stack<T> & o ) {
    17                 node ** crnt = &head;
    18                 for ( node * next = o.head; next; next = next->next ) {
     13        void copy(const stack<T>& o) {
     14                node** crnt = &head;
     15                for ( node* next = o.head; next; next = next->next ) {
    1916                        *crnt = new node{ next->value }; /***/
    2017                        crnt = &(*crnt)->next;
     
    2219                *crnt = nullptr;
    2320        }
    24 
     21public:
    2522        void clear() {
    26                 for ( node * next = head; next; ) {
    27                         node * crnt = next;
     23            for ( node* next = head; next; ) {
     24                        node* crnt = next;
    2825                        next = crnt->next;
    2926                        delete crnt;
     
    3229        }
    3330
     31        stack() : head(nullptr) {}
     32        stack(const stack<T>& o) { copy(o); }
    3433        ~stack() { clear(); }
    3534
    36         stack & operator= ( const stack<T> & o ) {
     35        stack& operator= (const stack<T>& o) {
    3736                if ( this == &o ) return *this;
    3837                clear();
    39                 copy( o );
    40                 return *this;
    41         }
    42 
    43         stack & operator= ( stack<T> && o ) {
    44                 if ( this == &o ) return *this;
    45                 head = o.head;
    46                 o.head = nullptr;
     38                copy(o);
    4739                return *this;
    4840        }
     
    5042        bool empty() const { return head == nullptr; }
    5143
    52         void push( const T & value ) { head = new node{ value, head };  /***/ }
     44        void push(const T& value) { head = new node{ value, head };  /***/ }
    5345
    5446        T pop() {
    55                 node * n = head;
     47                node* n = head;
    5648                head = n->next;
    57                 T v = std::move( n->value );
     49                T x = std::move(n->value);
    5850                delete n;
    59                 return v;
     51                return x;
    6052        }
    6153};
Note: See TracChangeset for help on using the changeset viewer.