/*
 * push_pop_list.cpp
 *
 *  Created on: 28.11.2013
 *      Author: trifon
 */

#include "lqueue.cpp"
#include "lstack.cpp"
#include "linked_list.cpp"

template <typename T>
class PushPop {
public:
	virtual bool push(T const& x) = 0;
	virtual bool pop(T& x) = 0;
};

template <typename T>
class PushPopQueue : public PushPop<T>, public LQueue<T> {
public:
	bool push(T const& x) { return LQueue<T>::push(x); }
	bool pop(T& x) { return LQueue<T>::pop(x); }
};

template <typename T>
class PushPopStack : public PushPop<T>, public LStack<T> {
public:
	bool push(T const& x) { return LStack<T>::push(x); }
	bool pop(T& x) { return LStack<T>::pop(x); }
};

typedef LinkedList<PushPop<int>* > PushPopIntList;