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 84457 2009-02-13 14:52:13Z msmit $")
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 CORBA::ULong const length = this->factories_.length ();
00022
00023 for (CORBA::ULong i = 0; i < length; ++i)
00024 {
00025 ::Compression::CompressorId const current =
00026 this->factories_[i]->compressor_id ();
00027
00028 if (compressor_factory->compressor_id () == current)
00029 {
00030 throw ::Compression::FactoryAlreadyRegistered ();
00031 }
00032 }
00033 factories_.length (length + 1);
00034 factories_[length] = ::Compression::CompressorFactory::_duplicate (
00035 compressor_factory);
00036 }
00037 else
00038 {
00039
00040 throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 44, CORBA::COMPLETED_NO);
00041 }
00042 }
00043
00044 void
00045 CompressionManager::unregister_factory (::Compression::CompressorId
00046 compressor_id)
00047 {
00048 ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
00049
00050 CORBA::ULong const length = this->factories_.length ();
00051
00052 for (CORBA::ULong i = 0; i < length; ++i)
00053 {
00054 ::Compression::CompressorId const current =
00055 this->factories_[i]->compressor_id ();
00056
00057 if (current != compressor_id)
00058 {
00059 continue;
00060 }
00061
00062 this->factories_[i] = ::Compression::CompressorFactory::_nil ();
00063
00064 return;
00065 }
00066
00067
00068 throw ::Compression::UnknownCompressorId ();
00069 }
00070
00071 ::Compression::CompressorFactory_ptr
00072 CompressionManager::get_factory (::Compression::CompressorId compressor_id)
00073 {
00074 ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_,
00075 ::Compression::CompressorFactory::_nil ());
00076
00077 CORBA::ULong const length = this->factories_.length ();
00078
00079 for (CORBA::ULong i = 0; i < length; ++i)
00080 {
00081 ::Compression::CompressorId const current =
00082 this->factories_[i]->compressor_id ();
00083
00084 if (current != compressor_id)
00085 {
00086 continue;
00087 }
00088
00089 return ::Compression::CompressorFactory::_duplicate (
00090 this->factories_[i]);
00091 }
00092
00093 throw ::Compression::UnknownCompressorId ();
00094 }
00095
00096 ::Compression::Compressor_ptr
00097 CompressionManager::get_compressor (::Compression::CompressorId
00098 compressor_id,
00099 ::Compression::CompressionLevel
00100 compression_level)
00101 {
00102 ::Compression::CompressorFactory_var factory = this->get_factory (
00103 compressor_id);
00104
00105 return factory->get_compressor (compression_level);
00106 }
00107
00108 ::Compression::CompressorFactorySeq *
00109 CompressionManager::get_factories (void)
00110 {
00111
00112 return 0;
00113 }
00114
00115 }
00116
00117 TAO_END_VERSIONED_NAMESPACE_DECL