dsa-practice/libs/dope/stacks.hpp

60 lines
912 B
C++

#pragma once
#include <stdlib.h>
template <class T, size_t S>
class DopeStack{
static const size_t size = S;
T stack[S];
T* head;
size_t occupancy;
public:
DopeStack();
T pop();
void push(T item);
T peek();
size_t getOccupancy(){return occupancy;}
bool isEmpty();
};
// Implementation ____________________________________________________
template <class T, size_t S>
DopeStack<T, S>::DopeStack():
head (&stack[0]),
occupancy(0)
{
}
template <class T, size_t S>
T DopeStack<T, S>::pop(){
T ret = *head;
if(head != &stack[0]){
head--;
}
occupancy--;
return ret;
}
template <class T, size_t S>
void DopeStack<T, S>::push(T item){
if(occupancy != 0){
head++;
}
*head = item;
occupancy++;
}
template <class T, size_t S>
T DopeStack<T, S>::peek(){
return *head;
}
template <class T, size_t S>
bool DopeStack<T, S>::isEmpty(){
return (occupancy == 0);
}