Compression_Manager.cpp

Go to the documentation of this file.
00001 #include "tao/Compression/Compression_Manager.h"
00002 
00003 ACE_RCSID (Compression,
00004            Compression_Manager,
00005            "$Id: Compression_Manager.cpp 77390 2007-02-26 13:59:03Z johnnyw $")
00006 
00007 #include "tao/ORB_Constants.h"
00008 
00009 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00010 
00011 namespace TAO
00012 {
00013 
00014   void
00015   CompressionManager::register_factory (::Compression::CompressorFactory_ptr
00016                                         compressor_factory)
00017   {
00018     if (!::CORBA::is_nil (compressor_factory))
00019       {
00020         ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
00021 
00022         CORBA::ULong const length = this->factories_.length ();
00023 
00024         for (CORBA::ULong i = 0; i < length; ++i)
00025           {
00026             ::Compression::CompressorId const current =
00027               this->factories_[i]->compressor_id ();
00028 
00029             if (compressor_factory->compressor_id () == current)
00030               {
00031                 throw ::Compression::FactoryAlreadyRegistered ();
00032               }
00033           }
00034         factories_.length (length + 1);
00035         factories_[length] = ::Compression::CompressorFactory::_duplicate (
00036           compressor_factory);
00037       }
00038     else
00039       {
00040         // @todo Standardize this minor code
00041         throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 44, CORBA::COMPLETED_NO);
00042       }
00043   }
00044 
00045   void
00046   CompressionManager::unregister_factory (::Compression::CompressorId
00047                                           compressor_id)
00048   {
00049     ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
00050 
00051     CORBA::ULong const length = this->factories_.length ();
00052 
00053     for (CORBA::ULong i = 0; i < length; ++i)
00054       {
00055         ::Compression::CompressorId const current =
00056           this->factories_[i]->compressor_id ();
00057 
00058         if (current != compressor_id)
00059           {
00060             continue;
00061           }
00062 
00063         this->factories_[i] = ::Compression::CompressorFactory::_nil ();
00064         // make sequence smaller
00065 
00066         return;
00067       }
00068 
00069     // todo exception
00070     throw ::Compression::UnknownCompressorId ();
00071   }
00072 
00073   ::Compression::CompressorFactory_ptr
00074   CompressionManager::get_factory (::Compression::CompressorId compressor_id)
00075   {
00076     ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_,
00077         ::Compression::CompressorFactory::_nil ());
00078 
00079     CORBA::ULong const length = this->factories_.length ();
00080 
00081     for (CORBA::ULong i = 0; i < length; ++i)
00082       {
00083         ::Compression::CompressorId const current =
00084           this->factories_[i]->compressor_id ();
00085 
00086         if (current != compressor_id)
00087           {
00088             continue;
00089           }
00090 
00091         return ::Compression::CompressorFactory::_duplicate (
00092           this->factories_[i]);
00093       }
00094 
00095     throw ::Compression::UnknownCompressorId ();
00096   }
00097 
00098   ::Compression::Compressor_ptr
00099   CompressionManager::get_compressor (::Compression::CompressorId
00100                                       compressor_id,
00101                                       ::Compression::CompressionLevel
00102                                       compression_level)
00103   {
00104     ::Compression::CompressorFactory_var factory = this->get_factory (
00105       compressor_id);
00106 
00107     return factory->get_compressor (compression_level);
00108   }
00109 
00110   ::Compression::CompressorFactorySeq *
00111   CompressionManager::get_factories (void)
00112   {
00113     // todo
00114     return 0;
00115   }
00116 
00117 }
00118 
00119 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Sun Jan 27 13:31:44 2008 for TAO_Compression by doxygen 1.3.6