1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
/*
* Dibbler - a portable DHCPv6
*
* authors: Tomasz Mrugalski <thomson@klub.com.pl>
* Marek Senderski <msend@o2.pl>
*
* $Id: Container.h,v 1.6 2006-03-03 20:21:46 thomson Exp $
*
*/
#ifndef CONTAINER_H
#define CONTAINER_H
#include <list>
using namespace std;
#define List(x) TContainer< SmartPtr< x > >
template <class TYP>
class TContainer{
public:
TContainer();
~TContainer();
bool append(const TYP &foo);
bool prepend(const TYP& foo);
int count();
void first();
void delFirst();
void del();
void clear();
TYP get();
TYP getPrev();
TYP getLast();
TYP getFirst();
void delLast();
private:
list<TYP> lista;
typename list<TYP>::iterator it;
};
template <class TYP>
TContainer<TYP>::TContainer() {
}
template <class TYP>
TContainer<TYP>::~TContainer() {
lista.clear();
}
template <class TYP>
void TContainer<TYP>::clear() {
lista.clear();
}
template <class TYP>
int TContainer<TYP>::count() {
return (int)lista.size();
}
template <class TYP>
bool TContainer<TYP>::append(const TYP& foo) {
lista.push_back(foo);
return true;
}
template <class TYP>bool TContainer<TYP>::prepend(const TYP& foo) {
lista.push_front(foo);
return true;
}
template <class TYP>
void TContainer<TYP>::first() {
it=lista.begin();
return;
}
template <class TYP>
TYP TContainer<TYP>::get() {
if (it!=lista.end()) {
return *it++;
} else {
return TYP();
}
}
template <class TYP>
TYP TContainer<TYP>::getPrev() {
if (it!=lista.begin()) {
return *it--;
} else {
return TYP();
}
}
template <class TYP>
void TContainer<TYP>::delFirst() {
lista.pop_front();
first();
}
template <class TYP>
void TContainer<TYP>::del() {
it--;
lista.erase(it);
first();
}
template <class TYP>TYP TContainer<TYP>::getLast() {
return lista.back();
}
template <class TYP>void TContainer<TYP>::delLast() {
lista.pop_back(); first();
}
template <class TYP>TYP TContainer<TYP>::getFirst() {
return lista.front();
}
#endif
|