source: doc/papers/OOPSLA17/evaluation/cpp-vstack.cpp @ 82a5ea2

Last change on this file since 82a5ea2 was f4e3419d, checked in by Peter A. Buhr <pabuhr@…>, 7 years ago

restructure paper documents

  • Property mode set to 100644
File size: 1.1 KB
RevLine 
[b276be5]1#include "cpp-vstack.hpp"
2#include <utility>
3
[c87cd93]4stack::node::node( const object& v, node* n ) : value( v.new_copy() ), next( n ) {}
[b276be5]5
6void stack::copy(const stack& o) {
7        node** crnt = &head;
[6a8ac0b]8        for ( node* next = o.head; next; next = next->next ) {
[b276be5]9                *crnt = new node{ *next->value };
10                crnt = &(*crnt)->next;
11        }
12        *crnt = nullptr;
13}
14
15stack::stack() : head(nullptr) {}
16stack::stack(const stack& o) { copy(o); }
17stack::stack(stack&& o) : head(o.head) { o.head = nullptr; }
18stack::~stack() { clear(); }
19
20stack& stack::operator= (const stack& o) {
21        if ( this == &o ) return *this;
22        clear();
23        copy(o);
24        return *this;
25}
26
27stack& stack::operator= (stack&& o) {
28        if ( this == &o ) return *this;
29        head = o.head;
30        o.head = nullptr;
31        return *this;
32}
33
[a381b46]34void stack::clear() {
[6a8ac0b]35    for ( node* next = head; next; ) {
[a381b46]36                node* crnt = next;
37                next = crnt->next;
38                delete crnt;
39        }
40        head = nullptr;
41}
42
43
[79b8dc3]44bool stack::empty() const { return head == nullptr; }
[b276be5]45
[c87cd93]46void stack::push(const object& value) { head = new node{ value, head }; /***/ }
[b276be5]47
[79b8dc3]48ptr<object> stack::pop() {
[b276be5]49        node* n = head;
50        head = n->next;
[79b8dc3]51        ptr<object> x = std::move(n->value);
[b276be5]52        delete n;
53        return x;
54}
Note: See TracBrowser for help on using the repository browser.