(file) Return to IDFactory.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/IDFactory.cpp between version 1.1.2.1 and 1.1.2.8

version 1.1.2.1, 2006/06/30 18:31:16 version 1.1.2.8, 2006/06/30 22:37:52
Line 35 
Line 35 
 #include <new> #include <new>
 #include "IDFactory.h" #include "IDFactory.h"
  
 #define PEGASUS_IDFACTORY_MAGIC 0x94E91236  
   
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 IDFactory::IDFactory() : _next(1), _magic(PEGASUS_IDFACTORY_MAGIC)  IDFactory::IDFactory(Uint32 firstID) : _firstID(firstID), _nextID(_firstID)
 { {
     new (_mutex) Mutex();  
 } }
  
 IDFactory::~IDFactory() IDFactory::~IDFactory()
 { {
     _magic = 0xDDDDDDDD;      PEGASUS_DEBUG_ASSERT(_magic);
     // Note: never destructor mutex!  }
   
   Uint32 IDFactory::getID() const
   {
       PEGASUS_DEBUG_ASSERT(_magic);
   
       IDFactory* self = (IDFactory*)this;
   
       Uint32 id;
   
       self->_mutex.lock();
       {
           if (_pool.isEmpty())
           {
               if (self->_nextID < _firstID)
                   self->_nextID = _firstID;
   
               id = self->_nextID++;
           }
           else
           {
               id = _pool.top();
               self->_pool.pop();
 } }
       }
       self->_mutex.unlock();
  
 Uint32 IDFactory::getNext()      return id;
   }
   
   void IDFactory::putID(Uint32 id)
 { {
     if (_magic != PEGASUS_IDFACTORY_MAGIC)      PEGASUS_DEBUG_ASSERT(_magic);
       PEGASUS_DEBUG_ASSERT(id >= _firstID);
   
       if (id < _firstID)
           return;
   
       _mutex.lock();
     {     {
         fprintf(stderr,          _pool.push(id);
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"      }
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"      _mutex.unlock();
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n"  
             "WARNING: IDFactory::getNext(): using destructed IDFactory\n");  
     }  
   
     ((Mutex*)_mutex)->lock();  
     Uint32 tmp = _next++;  
     ((Mutex*)_mutex)->unlock();  
     return tmp;  
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.8

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2