21 #ifndef _TULIPIDMANAGER_H 22 #define _TULIPIDMANAGER_H 25 #include <tulip/Iterator.h> 30 struct IdManagerState {
36 std::set<unsigned int> freeIds;
38 IdManagerState(): firstId(0), nextId(0) {}
43 template <
typename TYPE>
44 class IdManagerIterator:
public Iterator<TYPE> {
49 const std::set<unsigned int>& freeIds;
50 std::set<unsigned int>::const_iterator it;
54 IdManagerIterator(
const IdManagerState& infos):
55 current(infos.firstId), last(infos.nextId), freeIds(infos.freeIds), it(freeIds.begin()) {
56 #ifdef TLP_NO_IDS_REUSE 57 std::set<unsigned int>::const_reverse_iterator itr;
58 itr = freeIds.rbegin();
60 while(itr != freeIds.rend() && (*itr) == last - 1) {
67 ~IdManagerIterator() {}
70 return (current < last);
74 unsigned int tmp = current;
77 while(it != freeIds.end()) {
78 if (current < *it)
return (TYPE) tmp;
89 class TLP_SCOPE IdManager {
99 bool is_free(
unsigned int)
const;
103 void free(
const unsigned int);
108 #ifdef TLP_NO_IDS_REUSE 109 return state.nextId++;
111 return state.firstId ?
113 (state.freeIds.empty() ? state.nextId++ : getFreeId());
119 unsigned int getFirstOfRange(
unsigned nb) {
120 unsigned int first = state.nextId;
125 #ifndef TLP_NO_IDS_REUSE 129 unsigned int getFreeId();
136 void getFreeId(
unsigned int id);
140 const IdManagerState& getState() {
146 void restoreState(
const IdManagerState& infos) {
154 template<
typename TYPE>
156 return new IdManagerIterator<TYPE>(state);
159 friend std::ostream&
operator<<(std::ostream &,
const IdManager &);
160 friend class IdManagerTest;
163 std::ostream&
operator<<(std::ostream &,
const IdManager &);
std::ostream & operator<<(std::ostream &os, const Array< Obj, SIZE > &array)
operator << stream operator to easily print an array, or save it to a file.
Interface for Tulip iterators. Allows basic iteration operations only.