Changeset 81e8ab0 for doc/papers/general/evaluation/cpp-stack.hpp
- Timestamp:
- Mar 9, 2018, 9:30:47 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 8b001bd
- Parents:
- 29db723
- File:
-
- 1 edited
-
doc/papers/general/evaluation/cpp-stack.hpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/general/evaluation/cpp-stack.hpp
r29db723 r81e8ab0 2 2 #include <utility> 3 3 4 template<typename T> classstack {4 template<typename T> struct stack { 5 5 struct node { 6 6 T value; 7 node* next; 7 node * next; 8 node( const T & v, node * n = nullptr ) : value( v ), next( n ) {} 9 }; 10 node * head; 8 11 9 node( const T& v, node* n = nullptr ) : value(v), next(n) {}10 };11 node* head;12 stack() : head( nullptr ) {} 13 stack( const stack<T> & o) { copy( o ); } 14 stack( stack<T> && o ) : head( o.head ) { o.head = nullptr; } 12 15 13 void copy( const stack<T>& o) {14 node ** crnt = &head;15 for ( node * next = o.head; next; next = next->next ) {16 void copy( const stack<T> & o ) { 17 node ** crnt = &head; 18 for ( node * next = o.head; next; next = next->next ) { 16 19 *crnt = new node{ next->value }; /***/ 17 20 crnt = &(*crnt)->next; … … 19 22 *crnt = nullptr; 20 23 } 21 public: 24 22 25 void clear() { 23 for ( node* next = head; next; ) {24 node * crnt = next;26 for ( node * next = head; next; ) { 27 node * crnt = next; 25 28 next = crnt->next; 26 29 delete crnt; … … 29 32 } 30 33 31 stack() : head(nullptr) {}32 stack(const stack<T>& o) { copy(o); }33 stack(stack<T>&& o) : head(o.head) { o.head = nullptr; }34 34 ~stack() { clear(); } 35 35 36 stack & operator= (const stack<T>& o) {36 stack & operator= ( const stack<T> & o ) { 37 37 if ( this == &o ) return *this; 38 38 clear(); 39 copy( o);39 copy( o ); 40 40 return *this; 41 41 } 42 42 43 stack & operator= (stack<T>&& o) {43 stack & operator= ( stack<T> && o ) { 44 44 if ( this == &o ) return *this; 45 45 head = o.head; … … 50 50 bool empty() const { return head == nullptr; } 51 51 52 void push( const T& value) { head = new node{ value, head }; /***/ }52 void push( const T & value ) { head = new node{ value, head }; /***/ } 53 53 54 54 T pop() { 55 node * n = head;55 node * n = head; 56 56 head = n->next; 57 T x = std::move(n->value);57 T v = std::move( n->value ); 58 58 delete n; 59 return x;59 return v; 60 60 } 61 61 };
Note:
See TracChangeset
for help on using the changeset viewer.