21 #ifndef DOXYGEN_NOTFOR_DEVEL 
   23 #ifndef _TULIPIDMANAGER_H 
   24 #define _TULIPIDMANAGER_H 
   27 #include <tulip/Iterator.h> 
   32 struct IdManagerState {
 
   38   std::set<unsigned int> freeIds;
 
   40   IdManagerState(): firstId(0), nextId(0) {}
 
   45 template <
typename TYPE>
 
   46 class IdManagerIterator:
public Iterator<TYPE> {
 
   51   const std::set<unsigned int>& freeIds;
 
   52   std::set<unsigned int>::const_iterator it;
 
   56   IdManagerIterator(
const IdManagerState& infos):
 
   57     current(infos.firstId), last(infos.nextId), freeIds(infos.freeIds), it(freeIds.begin()) {
 
   58 #ifdef TLP_NO_IDS_REUSE 
   59     std::set<unsigned int>::const_reverse_iterator itr;
 
   60     itr = freeIds.rbegin();
 
   62     while(itr != freeIds.rend() && (*itr) == last - 1) {
 
   69   ~IdManagerIterator() {}
 
   72     return (current < last);
 
   76     unsigned int tmp = current;
 
   79     while(it != freeIds.end()) {
 
   80       if (current < *it) 
return (TYPE) tmp;
 
   91 class TLP_SCOPE IdManager {
 
  101   bool is_free(
unsigned int) 
const;
 
  105   void free(
const unsigned int);
 
  110 #ifdef TLP_NO_IDS_REUSE 
  111     return state.nextId++;
 
  113     return 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>
 
  155   Iterator<TYPE>* getIds()
 const {
 
  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 &);
 
  168 #endif //DOXYGEN_NOTFOR_DEVEL