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
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
00065
00066 return;
00067 }
00068
00069
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
00114 return 0;
00115 }
00116
00117 }
00118
00119 TAO_END_VERSIONED_NAMESPACE_DECL