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
|
#ifndef __el3__timeoutlist_h
#define __el3__timeoutlist_h
#include <iostream>
#include <list>
#include <vector>
namespace el3 {
template <class T> class Item {
public:
unsigned int timestamp;
T data;
};
template <class T> class Timeoutlist {
std::vector < Item <T> > items;
typename std::vector< Item <T> >::iterator pit;
public:
Timeoutlist() {
pit=items.end();
}
void add(T item,unsigned int timeout) {
Item <T> i;
i.data=item;
i.timestamp=timeout;
items.push_back(i);
pit=items.end();
}
void timeout(unsigned int ticks) {
typename std::vector< Item <T> >::iterator it;
bool found;
do {
found=false;
while (iterate()) {
if ((*pit).timestamp>ticks) continue;
items.erase(pit);
}
pit=items.end();
} while (found);
pit=items.end();
}
bool iterate() {
if (pit==items.end()) {
pit=items.begin();
if (pit==items.end()) return false;
return true;
}
pit++;
if (pit==items.end()) return false;
return true;
}
T get() {
return (*pit).data;
}
};
} //namespace
#endif
|