summaryrefslogtreecommitdiff
path: root/trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp')
-rw-r--r--trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp b/trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp
new file mode 100644
index 00000000000..2a228ffe01d
--- /dev/null
+++ b/trunk/TAO/TAO_IDL/be/be_visitor_factory.cpp
@@ -0,0 +1,144 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL Backend
+//
+// = FILENAME
+// be_visitor_factory.cpp
+//
+// = DESCRIPTION
+// Defines a factory that returns a specialized visitor object based on the
+// code generation state. This factory creates visitors associated with
+// Asynchronous Messaging Invocations (AMI) since, because of implied IDL,
+// state is not locally known at visitor creation time.
+//
+// = AUTHOR
+// Aniruddha Gokhale
+//
+// ============================================================================
+
+#include "ast_argument.h"
+
+#include "be_visitor_factory.h"
+#include "be_visitor_context.h"
+
+#include "be_visitor_decl.h"
+#include "be_visitor_scope.h"
+#include "be_visitor_interface/interface.h"
+#include "be_visitor_interface/interface_ch.h"
+#include "be_visitor_interface/ami_interface_ch.h"
+#include "be_visitor_valuetype/valuetype.h"
+#include "be_visitor_valuetype/valuetype_ch.h"
+#include "be_visitor_valuetype/valuetype_obv_ch.h"
+#include "be_visitor_valuetype/valuetype_obv_cs.h"
+#include "be_visitor_valuetype/ami_exception_holder_ch.h"
+#include "be_visitor_valuetype/ami_exception_holder_cs.h"
+#include "be_visitor_operation/operation.h"
+#include "be_visitor_operation/operation_ch.h"
+#include "be_visitor_operation/operation_cs.h"
+#include "be_visitor_operation/ami_ch.h"
+#include "be_visitor_operation/ami_cs.h"
+#include "be_visitor_operation/ami_handler_reply_stub_operation_ch.h"
+#include "be_visitor_operation/ami_handler_reply_stub_operation_cs.h"
+#include "be_visitor_operation/ami_exception_holder_operation_cs.h"
+
+ACE_RCSID (be,
+ be_visitor_factory,
+ "$Id$")
+
+TAO_Visitor_Factory::TAO_Visitor_Factory (void)
+{
+}
+
+TAO_Visitor_Factory::~TAO_Visitor_Factory (void)
+{
+}
+
+be_visitor *
+TAO_Visitor_Factory::make_visitor (be_visitor_context *ctx)
+{
+ be_visitor *retval = 0;
+
+ switch (ctx->state ())
+ {
+ case TAO_CodeGen::TAO_INTERFACE_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_interface_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_VALUETYPE_OBV_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_valuetype_obv_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_VALUETYPE_OBV_CS:
+ ACE_NEW_RETURN (retval,
+ be_visitor_valuetype_obv_cs (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_OPERATION_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_operation_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_OPERATION_CS:
+ ACE_NEW_RETURN (retval,
+ be_visitor_operation_cs (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_AMI_INTERFACE_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_ami_interface_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_AMI_HANDLER_REPLY_STUB_OPERATION_CH:
+ ACE_NEW_RETURN (
+ retval,
+ be_visitor_operation_ami_handler_reply_stub_operation_ch (ctx),
+ 0
+ );
+ break;
+ case TAO_CodeGen::TAO_AMI_HANDLER_REPLY_STUB_OPERATION_CS:
+ ACE_NEW_RETURN (
+ retval,
+ be_visitor_operation_ami_handler_reply_stub_operation_cs (ctx),
+ 0
+ );
+ break;
+ case TAO_CodeGen::TAO_AMI_SENDC_OPERATION_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_operation_ami_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_AMI_SENDC_OPERATION_CS:
+ ACE_NEW_RETURN (retval,
+ be_visitor_operation_ami_cs (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_AMI_EXCEPTION_HOLDER_RAISE_OPERATION_CS:
+ ACE_NEW_RETURN (
+ retval,
+ be_visitor_operation_ami_exception_holder_operation_cs (ctx),
+ 0
+ );
+ break;
+ case TAO_CodeGen::TAO_AMI_EXCEPTION_HOLDER_VALUETYPE_CH:
+ ACE_NEW_RETURN (retval,
+ be_visitor_valuetype_ami_exception_holder_ch (ctx),
+ 0);
+ break;
+ case TAO_CodeGen::TAO_AMI_EXCEPTION_HOLDER_VALUETYPE_CS:
+ ACE_NEW_RETURN (retval,
+ be_visitor_valuetype_ami_exception_holder_cs (ctx),
+ 0);
+ break;
+ default:
+ // An error.
+ return 0;
+ }
+
+ return retval;
+}
+