File: timeoutlist.h

package info (click to toggle)
enemylines3 1.2-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,380 kB
  • ctags: 1,444
  • sloc: cpp: 16,323; makefile: 74; sh: 52
file content (71 lines) | stat: -rw-r--r-- 1,090 bytes parent folder | download | duplicates (6)
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