summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_interface_strategy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_interface_strategy.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_interface_strategy.cpp1124
1 files changed, 1124 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_interface_strategy.cpp b/TAO/TAO_IDL/be/be_interface_strategy.cpp
new file mode 100644
index 00000000000..29894b7e2ae
--- /dev/null
+++ b/TAO/TAO_IDL/be/be_interface_strategy.cpp
@@ -0,0 +1,1124 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// be_interface_strategy.cpp
+//
+// = DESCRIPTION
+// A strategy to cover the differences between various variants
+// of an interface
+//
+// = AUTHOR
+// Michael Kircher
+//
+// ============================================================================
+
+#include "be_interface_strategy.h"
+#include "be_interface.h"
+#include "be_extern.h"
+#include "utl_identifier.h"
+
+ACE_RCSID (be,
+ be_interface_strategy,
+ "$Id$")
+
+
+be_interface_strategy::be_interface_strategy (be_interface *node,
+ Strategy_Kind strategy_type)
+ : local_name_(0),
+ full_name_(0),
+ flat_name_(0),
+ repoID_(0),
+ full_skel_name_(0),
+ full_coll_name_(0),
+ local_coll_name_(0),
+ relative_skel_name_(0),
+ node_ (node),
+ cached_type_ (-1),
+ strategy_type_ (strategy_type)
+{
+}
+
+be_interface_strategy::~be_interface_strategy (void)
+{
+}
+
+// Interface Type Strategy Base Class
+
+// Relative skeleton name.
+const char *
+be_interface_strategy::relative_skel_name (const char *skel_name)
+{
+ return be_interface::relative_name (this->full_skel_name (),
+ skel_name);
+}
+
+
+
+// Compute stringified fully qualified collocated class name.
+void
+be_interface_strategy::compute_coll_names (int type,
+ const char *prefix,
+ const char *suffix)
+{
+ if (type == this->cached_type_ && this->full_coll_name_ != 0)
+ {
+ return;
+ }
+ else
+ {
+ this->cached_type_ = type;
+ delete [] this->full_coll_name_;
+ delete [] this->local_coll_name_;
+ }
+
+ static const char *collocated_names[] = {"_tao_thru_poa_collocated_",
+ "_tao_direct_collocated_"};
+ static const char *poa = "POA_";
+
+ // Reserve enough room for the "POA_" prefix, the "_tao_collocated_"
+ // prefix and the local name and the (optional) "::"
+ const char *collocated = collocated_names[type];
+
+ size_t name_len = ACE_OS::strlen (collocated)
+ + ACE_OS::strlen (poa)
+ + 1;
+
+ if (prefix)
+ {
+ name_len += ACE_OS::strlen (prefix);
+ }
+
+ if (suffix)
+ {
+ name_len += ACE_OS::strlen (suffix);
+ }
+
+ for (UTL_IdListActiveIterator i (this->node_->name ());
+ !i.is_done ();
+ i.next ())
+ {
+ // Reserve 2 characters for "::".
+ name_len += ACE_OS::strlen (i.item ()->get_string ()) + 2;
+ }
+
+ ACE_NEW (this->full_coll_name_,
+ char[name_len + 1]);
+
+ // Null terminate the string.
+ this->full_coll_name_[0] = 0;
+
+ // Only the first component get the "POA_" preffix.
+ int poa_added = 0;
+
+ // Iterate again.
+ // Must advance the iterator explicitly inside the loop.
+ for (UTL_IdListActiveIterator j (this->node_->name ());
+ !j.is_done ();)
+ {
+ const char *item = j.item ()->get_string ();
+
+ // Increase right away, so we can test for the final component
+ // in the loop.
+ j.next ();
+
+ // We add the POA_ preffix only if the first component is not
+ // the global scope...
+ if (ACE_OS::strcmp (item, "") != 0)
+ {
+ if (!j.is_done ())
+ {
+ // We only add the POA_ preffix if there are more than
+ // two components in the name, in other words, if the
+ // class is inside some scope.
+ if (!poa_added)
+ {
+ ACE_OS::strcat (this->full_coll_name_, poa);
+ poa_added = 1;
+ }
+ ACE_OS::strcat (this->full_coll_name_, item);
+ ACE_OS::strcat (this->full_coll_name_, "::");
+ }
+ else
+ {
+ ACE_OS::strcat (this->full_coll_name_, collocated);
+
+ if (prefix)
+ {
+ ACE_OS::strcat (this->full_coll_name_, prefix);
+ }
+
+ ACE_OS::strcat (this->full_coll_name_, item);
+
+ if (suffix)
+ {
+ ACE_OS::strcat (this->full_coll_name_, suffix);
+ }
+ }
+ }
+ }
+
+ // Compute the local name for the collocated class.
+ char *local_name = this->node_->AST_Interface::local_name ()->get_string ();
+ size_t local_len = ACE_OS::strlen (collocated)
+ + ACE_OS::strlen (local_name)
+ + 1;
+ if (prefix)
+ {
+ local_len += ACE_OS::strlen (prefix);
+ }
+
+ if (suffix)
+ {
+ local_len += ACE_OS::strlen (suffix);
+ }
+
+ ACE_NEW (this->local_coll_name_,
+ char[local_len]);
+
+ ACE_OS::strcpy (this->local_coll_name_,
+ collocated);
+
+ if (prefix)
+ {
+ ACE_OS::strcat (this->local_coll_name_,
+ prefix);
+ }
+
+ ACE_OS::strcat (this->local_coll_name_,
+ node_->AST_Interface::local_name ()->get_string ());
+
+ if (suffix)
+ {
+ ACE_OS::strcat (this->local_coll_name_, suffix);
+ }
+}
+
+
+void
+be_interface_strategy::compute_names (const char *name,
+ const char *prefix,
+ const char *suffix,
+ char *&new_name)
+{
+ if (!prefix || !suffix)
+ {
+ return;
+ }
+
+ size_t name_length = ACE_OS::strlen (name) +
+ ACE_OS::strlen (prefix) +
+ ACE_OS::strlen (suffix);
+
+ ACE_NEW (new_name,
+ char[name_length + 1]);
+
+ // Copy it in.
+ ACE_OS::strcpy (new_name, name);
+
+ const char *interface_name = 0;
+ size_t i = ACE_OS::strlen (name);
+
+ for (;i >= 1; i--)
+ {
+ if (name[i-1] == ':' && name[i] == ':')
+ {
+ interface_name = &name[i+1];
+ break;
+ }
+ else if (i >= 3)
+ {
+ if (name[i-3] == 'P' &&
+ name[i-2] == 'O' &&
+ name[i-1] == 'A' &&
+ name[i] == '_')
+ {
+ interface_name = &name[i+1];
+ break;
+ }
+ }
+ }
+
+ if (interface_name == 0)
+ {
+ interface_name = name;
+ }
+
+ ACE_OS::strcpy (&new_name[name_length
+ - ACE_OS::strlen (prefix)
+ - ACE_OS::strlen (interface_name)
+ - ACE_OS::strlen (suffix)],
+ prefix);
+
+ ACE_OS::strcpy (&new_name[name_length
+ - ACE_OS::strlen (interface_name)
+ - ACE_OS::strlen (suffix)],
+ interface_name);
+
+ ACE_OS::strcpy (&new_name[name_length
+ - ACE_OS::strlen(suffix)],
+ suffix);
+}
+
+
+TAO_OutStream *
+be_interface_strategy::get_out_stream (void)
+{
+ // Outstream.
+ return tao_cg->server_skeletons ();
+}
+
+const char *
+be_interface_strategy::get_out_stream_fname (void)
+{
+ return be_global->be_get_server_skeleton_fname ();
+}
+
+int
+be_interface_strategy::strategy_type (void)
+{
+ return strategy_type_;
+}
+
+TAO_CodeGen::CG_STATE
+be_interface_strategy::next_state (TAO_CodeGen::CG_STATE current_state,
+ int /* is_extra_state */)
+{
+ return current_state;
+}
+
+int
+be_interface_strategy::has_extra_code_generation (
+ TAO_CodeGen::CG_STATE /* current_state */
+ )
+{
+ return 0;
+}
+
+be_interface *
+be_interface_strategy::replacement (void)
+{
+ return 0;
+}
+
+void
+be_interface_strategy::destroy (void)
+{
+ if (this->local_name_ != 0)
+ {
+ delete [] this->local_name_;
+ this->local_name_ = 0;
+ }
+
+ if (this->full_name_ != 0)
+ {
+ delete [] this->full_name_;
+ this->full_name_ = 0;
+ }
+
+ if (this->flat_name_ != 0)
+ {
+ delete [] this->flat_name_;
+ this->flat_name_ = 0;
+ }
+
+ if (this->repoID_ != 0)
+ {
+ delete [] this->repoID_;
+ this->repoID_ = 0;
+ }
+
+ if (this->full_skel_name_ != 0)
+ {
+ delete [] this->full_skel_name_;
+ this->full_skel_name_ = 0;
+ }
+
+ if (this->full_coll_name_ != 0)
+ {
+ delete [] this->full_coll_name_;
+ this->full_coll_name_ = 0;
+ }
+
+ if (this->local_coll_name_ != 0)
+ {
+ delete [] this->local_coll_name_;
+ this->local_coll_name_ = 0;
+ }
+
+ if (this->relative_skel_name_ != 0)
+ {
+ delete [] this->relative_skel_name_;
+ this->relative_skel_name_ = 0;
+ }
+}
+
+// ****************************************************************
+// Default Strategy
+
+const char *be_interface_default_strategy::suffix_table_[] =
+{
+ "_Proxy_Impl",
+ "_Proxy_Broker"
+};
+
+const char *be_interface_default_strategy::tag_table_[] =
+{
+ "_Remote",
+ "_ThruPOA",
+ "_Direct",
+ "_Strategized",
+ "_TAO_"
+};
+
+
+be_interface_default_strategy::be_interface_default_strategy (
+ be_interface *node,
+ Strategy_Kind strategy_kind
+ )
+ : be_interface_strategy (node,
+ strategy_kind),
+ base_proxy_impl_name_ (0),
+ remote_proxy_impl_name_ (0),
+ direct_proxy_impl_name_ (0),
+ full_base_proxy_impl_name_ (0),
+ full_remote_proxy_impl_name_ (0),
+ full_direct_proxy_impl_name_ (0),
+ base_proxy_broker_ (0),
+ remote_proxy_broker_ (0),
+ strategized_proxy_broker_ (0),
+ full_base_proxy_broker_name_ (0),
+ full_remote_proxy_broker_name_ (0),
+ full_strategized_proxy_broker_name_(0),
+ client_scope_ (0),
+ flat_client_scope_ (0),
+ server_scope_ (0),
+ flat_server_scope_ (0)
+{
+}
+
+be_interface_default_strategy::~be_interface_default_strategy (void)
+{
+}
+
+const char *
+be_interface_default_strategy::full_name (void)
+{
+ if (this->full_name_ == 0)
+ {
+ size_t len = ACE_OS::strlen (node_->be_decl::full_name ());
+
+ ACE_NEW_RETURN (this->full_name_,
+ char[len + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_name_,
+ node_->be_decl::full_name ());
+ }
+
+ return this->full_name_;
+}
+
+const char *
+be_interface_default_strategy::local_name (void)
+{
+ if (!this->local_name_)
+ {
+ size_t len =
+ ACE_OS::strlen (node_->AST_Interface::local_name ()->get_string ());
+
+ ACE_NEW_RETURN (this->local_name_,
+ char[len + 1],
+ 0);
+
+ ACE_OS::strcpy (this->local_name_,
+ node_->AST_Interface::local_name ()->get_string ());
+ }
+
+ return this->local_name_;
+}
+
+const char *
+be_interface_default_strategy::flat_name (void)
+{
+ if (!this->flat_name_)
+ {
+ size_t len = ACE_OS::strlen (node_->be_decl::flat_name ());
+
+ ACE_NEW_RETURN (this->flat_name_,
+ char[len + 1],
+ 0);
+
+ ACE_OS::strcpy (this->flat_name_,
+ node_->be_decl::flat_name ());
+ }
+
+ return this->flat_name_;
+}
+
+const char *
+be_interface_default_strategy::repoID (void)
+{
+ if (this->repoID_ == 0)
+ {
+ size_t len = ACE_OS::strlen (node_->be_decl::repoID ());
+
+ ACE_NEW_RETURN (this->repoID_,
+ char[len + 1],
+ 0);
+
+ ACE_OS::strcpy (this->repoID_,
+ node_->be_decl::repoID ());
+ }
+
+ return this->repoID_;
+}
+
+const char *
+be_interface_default_strategy::full_skel_name (void)
+{
+ if (this->full_skel_name_ == 0)
+ {
+ // the following method is inherited from the base class
+ node_->compute_full_skel_name ("POA_",
+ this->full_skel_name_);
+ }
+
+ return this->full_skel_name_;
+}
+
+
+const char *
+be_interface_default_strategy::full_coll_name (int type)
+{
+ this->compute_coll_names (type,
+ 0, // prefix
+ 0); // suffix
+
+ return this->full_coll_name_;
+}
+
+const char *
+be_interface_default_strategy::local_coll_name (int type)
+{
+ this->compute_coll_names (type,
+ 0, // prefix
+ 0); // suffix
+
+ return this->local_coll_name_;
+}
+
+char *
+be_interface_default_strategy::create_with_prefix_suffix (
+ const char *prefix,
+ const char *str,
+ const char *suffix,
+ const char *separator
+ )
+{
+ char *cat_string = 0;
+ size_t length =
+ ACE_OS::strlen (str) +
+ ACE_OS::strlen (prefix) +
+ ACE_OS::strlen (suffix) +
+ ACE_OS::strlen (separator) +
+ 1; // The '/0'
+
+ ACE_NEW_RETURN (cat_string,
+ char[length],
+ 0);
+
+ ACE_OS::strcpy (cat_string, prefix);
+ ACE_OS::strcat (cat_string, str);
+ ACE_OS::strcat (cat_string, separator);
+ ACE_OS::strcat (cat_string, suffix);
+
+ return cat_string;
+}
+
+const char *
+be_interface_default_strategy::base_proxy_impl_name (void)
+{
+ if (this->base_proxy_impl_name_ != 0)
+ {
+ return this->base_proxy_impl_name_;
+ }
+
+ this->base_proxy_impl_name_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_IMPL]);
+
+ return this->base_proxy_impl_name_;
+}
+
+
+const char *
+be_interface_default_strategy::client_scope (void)
+{
+ if (this->client_scope_ != 0)
+ {
+ return this->client_scope_;
+ }
+
+ const char *full_name = this->full_name ();
+ const char *name = this->local_name ();
+
+ size_t offset = ACE_OS::strlen (name);
+ size_t length = ACE_OS::strlen (full_name) - offset;
+ ACE_NEW_RETURN (this->client_scope_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strncpy (this->client_scope_, full_name, length);
+ this->client_scope_[length] = '\0';
+
+ return this->client_scope_;
+}
+const char *
+be_interface_default_strategy::flat_client_scope (void)
+{
+ if (this->flat_client_scope_ != 0)
+ {
+ return this->flat_client_scope_;
+ }
+
+ const char *full_name = this->flat_name ();
+ const char *name = this->local_name ();
+
+ size_t offset = ACE_OS::strlen (name);
+ size_t length = ACE_OS::strlen (full_name) - offset;
+ ACE_NEW_RETURN (this->flat_client_scope_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strncpy (this->flat_client_scope_, full_name, length);
+ this->flat_client_scope_[length] = '\0';
+
+ return this->flat_client_scope_;
+}
+
+
+const char *
+be_interface_default_strategy::server_scope (void)
+{
+ if (this->server_scope_ != 0)
+ {
+ return this->server_scope_;
+ }
+
+ const char *full_name =
+ this->node_->full_coll_name (be_interface::DIRECT);
+
+ const char *name = this->node_->local_coll_name (be_interface::DIRECT);
+
+ size_t offset = ACE_OS::strlen (name);
+ size_t length = ACE_OS::strlen (full_name) - offset;
+ ACE_NEW_RETURN (this->server_scope_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strncpy (this->server_scope_, full_name, length);
+ this->server_scope_[length] = '\0';
+
+ return this->server_scope_;
+}
+
+const char *
+be_interface_default_strategy::flat_server_scope (void)
+{
+ if (this->flat_server_scope_ != 0)
+ {
+ return this->flat_server_scope_;
+ }
+
+ const char *full_name = this->flat_name ();
+ const char *name = this->local_name ();
+
+ size_t offset = ACE_OS::strlen (name);
+ size_t length = ACE_OS::strlen (full_name) - offset;
+ ACE_NEW_RETURN (this->flat_client_scope_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strncpy (this->flat_server_scope_, full_name, length);
+ this->flat_server_scope_[length] = '\0';
+
+ return this->flat_server_scope_;
+}
+
+
+
+const char *
+be_interface_default_strategy::full_base_proxy_impl_name (void)
+{
+ if (this->full_base_proxy_impl_name_ != 0)
+ {
+ return this->full_base_proxy_impl_name_;
+ }
+
+ const char *scope = this->client_scope ();
+ const char *base_name = this->base_proxy_impl_name ();
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_base_proxy_impl_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_base_proxy_impl_name_, scope);
+ ACE_OS::strcat (this->full_base_proxy_impl_name_, base_name);
+
+ return this->full_base_proxy_impl_name_;
+}
+
+
+
+const char *
+be_interface_default_strategy::remote_proxy_impl_name (void)
+{
+ if (this->remote_proxy_impl_name_ != 0)
+ {
+ return this->remote_proxy_impl_name_;
+ }
+
+
+ this->remote_proxy_impl_name_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_IMPL],
+ this->tag_table_[REMOTE]);
+
+ return this->remote_proxy_impl_name_;
+}
+
+const char *
+be_interface_default_strategy::full_remote_proxy_impl_name (void)
+{
+ if (this->full_remote_proxy_impl_name_ != 0)
+ {
+ return this->full_remote_proxy_impl_name_;
+ }
+
+ const char *scope = this->client_scope ();
+ const char *base_name = this->remote_proxy_impl_name ();
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_remote_proxy_impl_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_remote_proxy_impl_name_, scope);
+ ACE_OS::strcat (this->full_remote_proxy_impl_name_, base_name);
+
+ return this->full_remote_proxy_impl_name_;
+}
+
+const char *
+be_interface_default_strategy::direct_proxy_impl_name (void)
+{
+ if (this->direct_proxy_impl_name_ != 0)
+ {
+ return this->direct_proxy_impl_name_;
+ }
+
+ this->direct_proxy_impl_name_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_IMPL],
+ this->tag_table_[DIRECT]);
+
+ return this->direct_proxy_impl_name_;
+}
+
+
+const char *
+be_interface_default_strategy::full_direct_proxy_impl_name (void)
+{
+ if (this->full_direct_proxy_impl_name_ != 0)
+ {
+ return this->full_direct_proxy_impl_name_;
+ }
+
+ const char *scope = this->server_scope ();
+ const char *base_name = this->direct_proxy_impl_name ();
+
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_direct_proxy_impl_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_direct_proxy_impl_name_, scope);
+ ACE_OS::strcat (this->full_direct_proxy_impl_name_, base_name);
+
+ return this->full_direct_proxy_impl_name_;
+}
+
+
+const char *
+be_interface_default_strategy::base_proxy_broker_name (void)
+{
+ if (this->base_proxy_broker_ != 0)
+ {
+ return this->base_proxy_broker_;
+ }
+
+ this->base_proxy_broker_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_BROKER]);
+
+ return this->base_proxy_broker_;
+}
+
+
+const char *
+be_interface_default_strategy::full_base_proxy_broker_name (void)
+{
+ if (this->full_base_proxy_broker_name_ != 0)
+ {
+ return this->full_base_proxy_broker_name_;
+ }
+
+ const char *scope = this->client_scope ();
+ const char *base_name = this->base_proxy_broker_name ();
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_base_proxy_broker_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_base_proxy_broker_name_, scope);
+ ACE_OS::strcat (this->full_base_proxy_broker_name_, base_name);
+
+ return this->full_base_proxy_broker_name_;
+}
+
+const char *
+be_interface_default_strategy::remote_proxy_broker_name (void)
+{
+ if (this->remote_proxy_broker_ != 0)
+ {
+ return this->remote_proxy_broker_;
+ }
+
+ this->remote_proxy_broker_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_BROKER],
+ this->tag_table_[REMOTE]);
+
+ return this->remote_proxy_broker_;
+}
+
+
+const char *
+be_interface_default_strategy::full_remote_proxy_broker_name (void)
+{
+ if (this->full_remote_proxy_broker_name_ != 0)
+ {
+ return this->full_remote_proxy_broker_name_;
+ }
+
+ const char *scope = this->client_scope ();
+ const char *base_name = this->remote_proxy_broker_name ();
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_remote_proxy_broker_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_remote_proxy_broker_name_, scope);
+ ACE_OS::strcat (this->full_remote_proxy_broker_name_, base_name);
+
+ return this->full_remote_proxy_broker_name_;
+}
+
+
+const char *
+be_interface_default_strategy::strategized_proxy_broker_name (void)
+{
+ if (this->strategized_proxy_broker_ != 0)
+ {
+ return this->strategized_proxy_broker_;
+ }
+
+ this->strategized_proxy_broker_ =
+ this->create_with_prefix_suffix (this->tag_table_[GC_PREFIX],
+ this->node_->local_name (),
+ this->suffix_table_[PROXY_BROKER],
+ this->tag_table_[STRATEGIZED]);
+
+ return this->strategized_proxy_broker_;
+}
+
+const char *
+be_interface_default_strategy::full_strategized_proxy_broker_name (void)
+{
+ if (this->full_strategized_proxy_broker_name_ != 0)
+ {
+ return this->full_strategized_proxy_broker_name_;
+ }
+
+ const char *scope = this->server_scope ();
+ const char *base_name = this->strategized_proxy_broker_name ();
+ size_t length = ACE_OS::strlen (scope) + ACE_OS::strlen (base_name);
+ ACE_NEW_RETURN (this->full_strategized_proxy_broker_name_,
+ char[length + 1],
+ 0);
+
+ ACE_OS::strcpy (this->full_strategized_proxy_broker_name_, scope);
+ ACE_OS::strcat (this->full_strategized_proxy_broker_name_, base_name);
+
+ return this->full_strategized_proxy_broker_name_;
+}
+
+void
+be_interface_default_strategy::destroy (void)
+{
+ if (this->base_proxy_impl_name_ != 0)
+ {
+ delete [] this->base_proxy_impl_name_;
+ this->base_proxy_impl_name_ = 0;
+ }
+
+ if (this->remote_proxy_impl_name_ != 0)
+ {
+ delete [] this->remote_proxy_impl_name_;
+ this->remote_proxy_impl_name_ = 0;
+ }
+
+ if (this->direct_proxy_impl_name_ != 0)
+ {
+ delete [] this->direct_proxy_impl_name_;
+ this->direct_proxy_impl_name_ = 0;
+ }
+
+ if (this->full_base_proxy_impl_name_ != 0)
+ {
+ delete [] this->full_base_proxy_impl_name_;
+ this->full_base_proxy_impl_name_ = 0;
+ }
+
+ if (this->full_remote_proxy_impl_name_ != 0)
+ {
+ delete [] this->full_remote_proxy_impl_name_;
+ this->full_remote_proxy_impl_name_ = 0;
+ }
+
+ if (this->full_direct_proxy_impl_name_ != 0)
+ {
+ delete [] this->full_direct_proxy_impl_name_;
+ this->full_direct_proxy_impl_name_ = 0;
+ }
+
+ if (this->base_proxy_broker_ != 0)
+ {
+ delete [] this->base_proxy_broker_;
+ this->base_proxy_broker_ = 0;
+ }
+
+ if (this->remote_proxy_broker_ != 0)
+ {
+ delete [] this->remote_proxy_broker_;
+ this->remote_proxy_broker_ = 0;
+ }
+
+ if (this->strategized_proxy_broker_ != 0)
+ {
+ delete [] this->strategized_proxy_broker_;
+ this->strategized_proxy_broker_ = 0;
+ }
+
+ if (this->full_base_proxy_broker_name_ != 0)
+ {
+ delete [] this->full_base_proxy_broker_name_;
+ this->full_base_proxy_broker_name_ = 0;
+ }
+
+ if (this->full_remote_proxy_broker_name_ != 0)
+ {
+ delete [] this->full_remote_proxy_broker_name_;
+ this->full_remote_proxy_broker_name_ = 0;
+ }
+
+ if (this->full_strategized_proxy_broker_name_ != 0)
+ {
+ delete [] this->full_strategized_proxy_broker_name_;
+ this->full_strategized_proxy_broker_name_ = 0;
+ }
+
+ if (this->client_scope_ != 0)
+ {
+ delete [] this->client_scope_;
+ this->client_scope_ = 0;
+ }
+
+ if (this->flat_client_scope_ != 0)
+ {
+ delete [] this->flat_client_scope_;
+ this->flat_client_scope_ = 0;
+ }
+
+ if (this->server_scope_ != 0)
+ {
+ delete [] this->server_scope_;
+ this->server_scope_ = 0;
+ }
+
+ if (this->flat_server_scope_ != 0)
+ {
+ delete [] this->flat_server_scope_;
+ this->flat_server_scope_ = 0;
+ }
+
+ this->be_interface_strategy::destroy ();
+}
+
+// ****************************************************************
+// AMI Handler Strategy
+
+be_interface_ami_handler_strategy::be_interface_ami_handler_strategy (
+ be_interface *node
+ )
+ : be_interface_default_strategy (node,
+ AMI_HANDLER)
+{
+}
+
+be_interface_ami_handler_strategy::~be_interface_ami_handler_strategy (void)
+{
+}
+
+
+TAO_CodeGen::CG_STATE
+be_interface_ami_handler_strategy::next_state (
+ TAO_CodeGen::CG_STATE current_state,
+ int /*is_extra_state */
+ )
+{
+ return current_state;
+}
+
+
+// ****************************************************************
+// AMI Exception Holder Strategy
+
+be_interface_ami_exception_holder_strategy::
+be_interface_ami_exception_holder_strategy (be_interface *node)
+ : be_interface_default_strategy (node,
+ AMI_EXCEPTION_HOLDER)
+{
+}
+
+be_interface_ami_exception_holder_strategy
+::~be_interface_ami_exception_holder_strategy (void)
+{
+}
+
+
+TAO_CodeGen::CG_STATE
+be_interface_ami_exception_holder_strategy::next_state (
+ TAO_CodeGen::CG_STATE current_state,
+ int is_extra_state
+ )
+{
+ if (is_extra_state)
+ {
+ switch (current_state)
+ {
+ case TAO_CodeGen::TAO_VALUETYPE_OBV_CH:
+ return TAO_CodeGen::TAO_AMI_EXCEPTION_HOLDER_VALUETYPE_CH;
+ case TAO_CodeGen::TAO_VALUETYPE_OBV_CS:
+ return TAO_CodeGen::TAO_AMI_EXCEPTION_HOLDER_VALUETYPE_CS;
+ default:
+ return current_state;
+ }
+ }
+ else
+ {
+ return current_state;
+ }
+}
+
+
+int
+be_interface_ami_exception_holder_strategy::has_extra_code_generation (
+ TAO_CodeGen::CG_STATE current_state
+ )
+{
+ if (current_state == TAO_CodeGen::TAO_VALUETYPE_OBV_CH
+ || current_state == TAO_CodeGen::TAO_VALUETYPE_OBV_CS)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+
+// ****************************************************************
+// AMI Strategy
+
+be_interface_ami_strategy::be_interface_ami_strategy (be_interface *node,
+ be_interface *handler)
+ : be_interface_default_strategy (node,
+ AMI_INTERFACE),
+ handler_ (handler)
+{
+}
+
+be_interface_ami_strategy::~be_interface_ami_strategy (void)
+{
+}
+
+
+TAO_CodeGen::CG_STATE
+be_interface_ami_strategy::next_state (TAO_CodeGen::CG_STATE current_state,
+ int is_extra_state)
+{
+ if (is_extra_state)
+ {
+ switch (current_state)
+ {
+ case TAO_CodeGen::TAO_AMI_INTERFACE_CH:
+ return TAO_CodeGen::TAO_INTERFACE_CH;
+ default:
+ return current_state;
+ }
+ }
+ else
+ {
+ switch (current_state)
+ {
+ case TAO_CodeGen::TAO_INTERFACE_CH:
+ return TAO_CodeGen::TAO_AMI_INTERFACE_CH;
+ default:
+ return current_state;
+ }
+ }
+}
+
+
+int
+be_interface_ami_strategy::has_extra_code_generation (
+ TAO_CodeGen::CG_STATE current_state
+ )
+{
+ if (current_state == TAO_CodeGen::TAO_AMI_INTERFACE_CH)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+be_interface *
+be_interface_ami_strategy::replacement (void)
+{
+ return handler_;
+}
+