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

Diff for /pegasus/src/Pegasus/Common/ResponseHandler.cpp between version 1.6 and 1.7

version 1.6, 2003/10/14 01:48:26 version 1.7, 2003/10/17 23:14:18
Line 23 
Line 23 
 // //
 // Author: Chip Vincent (cvincent@us.ibm.com) // Author: Chip Vincent (cvincent@us.ibm.com)
 // //
 // Modified By:  // Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "ResponseHandler.h" #include "ResponseHandler.h"
 #include "ResponseHandlerRep.h" #include "ResponseHandlerRep.h"
   #include "InternalException.h"
   #include "HashTable.h"
   #include "IPC.h"
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
   PEGASUS_TEMPLATE_SPECIALIZATION struct HashFunc<void*>
   {
       static Uint32 hash(void* x) { return Uint32(x) + 13; }
   };
   
   typedef HashTable<ResponseHandler*, ResponseHandlerRep*,
                     EqualFunc<void*>,
                     HashFunc<void*> > RepTable;
   
   static RepTable repTable(512);
   static Mutex repTableMutex;
   
   ResponseHandlerRep* _newRep(
       ResponseHandler* object)
   {
       ResponseHandlerRep* newRep = new ResponseHandlerRep();
   
       auto_mutex lock(&repTableMutex);
       repTable.insert(object, newRep);
       return newRep;
   }
   
   ResponseHandlerRep* _newRep(
       ResponseHandler* object,
       const ResponseHandlerRep* rep)
   {
       ResponseHandlerRep* newRep = new ResponseHandlerRep(*rep);
   
       auto_mutex lock(&repTableMutex);
       repTable.insert(object, newRep);
       return newRep;
   }
   
   ResponseHandlerRep* _getRep(
       const ResponseHandler* object)
   {
       ResponseHandlerRep* rep;
       Boolean found;
   
       auto_mutex lock(&repTableMutex);
       found = repTable.lookup(const_cast<ResponseHandler*>(object), rep);
       PEGASUS_ASSERT(found == true);
       return rep;
   }
   
   void _deleteRep(
       ResponseHandler* object)
   {
       ResponseHandlerRep* rep;
       Boolean found;
   
       auto_mutex lock(&repTableMutex);
       found = repTable.lookup(object, rep);
       PEGASUS_ASSERT(found == true);
       delete rep;
       repTable.remove(object);
   }
   
   
 ResponseHandler::ResponseHandler() ResponseHandler::ResponseHandler()
 { {
     _rep = new ResponseHandlerRep();      _newRep(this);
 } }
  
 ResponseHandler::ResponseHandler(const ResponseHandler& handler) ResponseHandler::ResponseHandler(const ResponseHandler& handler)
 { {
     _rep = new ResponseHandlerRep(*handler._rep);      _newRep(this, _getRep(&handler));
 } }
  
 ResponseHandler& ResponseHandler::operator=(const ResponseHandler& handler) ResponseHandler& ResponseHandler::operator=(const ResponseHandler& handler)
 { {
     if (handler._rep != _rep)      if (&handler != this)
     {     {
         delete _rep;          _deleteRep(this);
         _rep = new ResponseHandlerRep(*handler._rep);          _newRep(this, _getRep(&handler));
     }     }
     return *this;     return *this;
 } }
  
 ResponseHandler::~ResponseHandler() ResponseHandler::~ResponseHandler()
 { {
     delete _rep;      _deleteRep(this);
 } }
  
 OperationContext ResponseHandler::getContext(void) const OperationContext ResponseHandler::getContext(void) const
 { {
     return(_rep->getContext());      return(_getRep(this)->getContext());
 } }
  
 void ResponseHandler::setContext(const OperationContext & context) void ResponseHandler::setContext(const OperationContext & context)
 { {
     _rep->setContext(context);      _getRep(this)->setContext(context);
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2