// stack.cc ----------------------------------------------- #include #include "stack.h" // IMPLEMENTERAS KANSKE I HUVUDUPPGIFT Stack::Elem::~Elem() { delete next; } // IMPLEMENTERAS KANSKE I HUVUDUPPGIFT Stack::Elem* Stack::Elem::clone() const { if ( this != nullptr) return new Elem(value, next->clone()); else return nullptr; } // IMPLEMENTERAS I HUVUDUPPGIFT Stack::Stack(Stack const& rhs) { mTop = rhs.mTop->clone(); } // IMPLEMENTERAS I HUVUDUPPGIFT Stack::~Stack() { delete mTop; } // LÄGGS TILL FÖR EXTRAPOÄNG Stack& Stack::operator=(Stack const& rhs) { if (this != &rhs) { Stack copy(rhs); Elem* save = mTop; mTop = copy.mTop; copy.mTop = save; } return *this; } // GIVEN KOD - ÄNDRAS INTE const Data& Stack::top() const { if (mTop == nullptr) throw std::out_of_range("FEL: Tom stack"); return mTop->value; } // GIVEN KOD - ÄNDRAS INTE Data Stack::pop() { Data save = top(); Elem* victim = mTop; mTop = mTop->next; victim->next = nullptr; // stoppa rekursiv delete! delete victim; return save; } // GIVEN KOD - ÄNDRAS INTE void Stack::push(Data const& d) { mTop = new Elem(d, mTop); } // GIVEN KOD - ÄNDRAS INTE unsigned Stack::size() const { unsigned sum = 0; for (Elem* c = mTop; c != nullptr; c = c->next) ++sum; return sum; }