summaryrefslogtreecommitdiff
path: root/TAO/tao/Compression/Compression_Manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Compression/Compression_Manager.cpp')
-rw-r--r--TAO/tao/Compression/Compression_Manager.cpp119
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