diff options
Diffstat (limited to 'trunk/TAO/tao/Parser_Registry.cpp')
-rw-r--r-- | trunk/TAO/tao/Parser_Registry.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/trunk/TAO/tao/Parser_Registry.cpp b/trunk/TAO/tao/Parser_Registry.cpp new file mode 100644 index 00000000000..8a31b17ac2e --- /dev/null +++ b/trunk/TAO/tao/Parser_Registry.cpp @@ -0,0 +1,78 @@ +// $Id$ + +#include "tao/Parser_Registry.h" +#include "tao/IOR_Parser.h" +#include "tao/ORB_Core.h" + +#include "ace/Dynamic_Service.h" + +#if !defined(__ACE_INLINE__) +#include "tao/Parser_Registry.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID (tao, + Parser_Registry, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_Parser_Registry::TAO_Parser_Registry (void) + : parsers_ (0), + size_ (0) +{ +} + +TAO_Parser_Registry::~TAO_Parser_Registry (void) +{ + delete [] this->parsers_; +} + +int +TAO_Parser_Registry::open (TAO_ORB_Core *orb_core) +{ + char **names; + int number_of_names = 0; + + orb_core->resource_factory ()->get_parser_names (names, + number_of_names); + + if (number_of_names == 0) + { + return -1; + } + + this->size_ = number_of_names; + ACE_NEW_RETURN (this->parsers_, + TAO_IOR_Parser*[this->size_], + -1); + + for (size_t i = 0; i != this->size_; ++i) + { + this->parsers_[i] = + ACE_Dynamic_Service<TAO_IOR_Parser>::instance (orb_core->configuration (), + names [i]); + + if (this->parsers_[i] == 0) + { + return -1; + } + } + + return 0; +} + +TAO_IOR_Parser * +TAO_Parser_Registry::match_parser (const char *ior_string) +{ + for (Parser_Iterator i = this->begin (); i != this->end (); ++i) + { + if ((*i)->match_prefix (ior_string)) + { + return *i; + } + } + + return 0; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |