diff options
Diffstat (limited to 'TAO/tao/Compression/Compression_Manager.cpp')
-rw-r--r-- | TAO/tao/Compression/Compression_Manager.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/TAO/tao/Compression/Compression_Manager.cpp b/TAO/tao/Compression/Compression_Manager.cpp new file mode 100644 index 00000000000..1d39880f451 --- /dev/null +++ b/TAO/tao/Compression/Compression_Manager.cpp @@ -0,0 +1,119 @@ +#include "tao/Compression/Compression_Manager.h" + +ACE_RCSID (Compression, + Compression_Manager, + "$Id$") + +#include "tao/ORB_Constants.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace TAO +{ + + void + CompressionManager::register_factory (::Compression::CompressorFactory_ptr + compressor_factory) + { + if (!::CORBA::is_nil (compressor_factory)) + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + + CORBA::ULong const length = this->factories_.length (); + + for (CORBA::ULong i = 0; i < length; ++i) + { + ::Compression::CompressorId const current = + this->factories_[i]->compressor_id (); + + if (compressor_factory->compressor_id () == current) + { + throw ::Compression::FactoryAlreadyRegistered (); + } + } + factories_.length (length + 1); + factories_[length] = ::Compression::CompressorFactory::_duplicate ( + compressor_factory); + } + else + { + // @todo Standardize this minor code + throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 44, CORBA::COMPLETED_NO); + } + } + + void + CompressionManager::unregister_factory (::Compression::CompressorId + compressor_id) + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + + CORBA::ULong const length = this->factories_.length (); + + for (CORBA::ULong i = 0; i < length; ++i) + { + ::Compression::CompressorId const current = + this->factories_[i]->compressor_id (); + + if (current != compressor_id) + { + continue; + } + + this->factories_[i] = ::Compression::CompressorFactory::_nil (); + // make sequence smaller + + return; + } + + // todo exception + throw ::Compression::UnknownCompressorId (); + } + + ::Compression::CompressorFactory_ptr + CompressionManager::get_factory (::Compression::CompressorId compressor_id) + { + ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_, + ::Compression::CompressorFactory::_nil ()); + + CORBA::ULong const length = this->factories_.length (); + + for (CORBA::ULong i = 0; i < length; ++i) + { + ::Compression::CompressorId const current = + this->factories_[i]->compressor_id (); + + if (current != compressor_id) + { + continue; + } + + return ::Compression::CompressorFactory::_duplicate ( + this->factories_[i]); + } + + throw ::Compression::UnknownCompressorId (); + } + + ::Compression::Compressor_ptr + CompressionManager::get_compressor (::Compression::CompressorId + compressor_id, + ::Compression::CompressionLevel + compression_level) + { + ::Compression::CompressorFactory_var factory = this->get_factory ( + compressor_id); + + return factory->get_compressor (compression_level); + } + + ::Compression::CompressorFactorySeq * + CompressionManager::get_factories (void) + { + // todo + return 0; + } + +} + +TAO_END_VERSIONED_NAMESPACE_DECL |