summaryrefslogtreecommitdiff
path: root/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp')
-rw-r--r--TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp332
1 files changed, 332 insertions, 0 deletions
diff --git a/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp b/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp
new file mode 100644
index 00000000000..1356da046ea
--- /dev/null
+++ b/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_i.cpp
@@ -0,0 +1,332 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/IDL_Cubit
+//
+// = FILENAME
+// Cubit_Client.cpp
+//
+// = AUTHOR
+// Andy Gokhale, Sumedh Mungee and Sergio Flores-Gaitan
+//
+// ============================================================================
+
+#include "tao/corba.h"
+#include "ace/Auto_Ptr.h"
+#include "Cubit_Client.h"
+#include "Cubit_i.h"
+
+#include "tao/Timeprobe.h"
+#include "RTI_IO.h"
+
+ACE_RCSID(IDL_Cubit, Cubit_Client, "$Id$")
+
+#if defined (ACE_ENABLE_TIMEPROBES)
+
+static const char *Cubit_i_Timeprobe_Description[] =
+{
+ "Cubit_i::cube_oneway - start",
+ "Cubit_i::cube_oneway - end",
+
+ "Cubit_i::cube_void - start",
+ "Cubit_i::cube_void - end",
+
+ "Cubit_i::cube_octet - start",
+ "Cubit_i::cube_octet - end",
+
+ "Cubit_i::cube_short - start",
+ "Cubit_i::cube_short - end",
+
+ "Cubit_i::cube_long - start",
+ "Cubit_i::cube_long - end",
+
+ "Cubit_i::cube_struct - start",
+ "Cubit_i::cube_struct - end",
+
+ "Cubit_i::cube_union - start",
+ "Cubit_i::cube_union - end",
+
+ "Cubit_i::cube_long_sequence - start",
+ "Cubit_i::cube_long_sequence - end",
+
+ "Cubit_i::cube_octet_sequence - start",
+ "Cubit_i::cube_octet_sequence - end"
+};
+
+enum
+{
+ // Timeprobe description table start key
+ CUBIT_I_CUBE_ONEWAY_START = 10100,
+ CUBIT_I_CUBE_ONEWAY_END,
+
+ CUBIT_I_CUBE_VOID_START,
+ CUBIT_I_CUBE_VOID_END,
+
+ CUBIT_I_CUBE_OCTET_START,
+ CUBIT_I_CUBE_OCTET_END,
+
+ CUBIT_I_CUBE_SHORT_START,
+ CUBIT_I_CUBE_SHORT_END,
+
+ CUBIT_I_CUBE_LONG_START,
+ CUBIT_I_CUBE_LONG_END,
+
+ CUBIT_I_CUBE_STRUCT_START,
+ CUBIT_I_CUBE_STRUCT_END,
+
+ CUBIT_I_CUBE_UNION_START,
+ CUBIT_I_CUBE_UNION_END,
+
+ CUBIT_I_CUBE_LONG_SEQUENCE_START,
+ CUBIT_I_CUBE_LONG_SEQUENCE_END,
+
+ CUBIT_I_CUBE_OCTET_SEQUENCE_START,
+ CUBIT_I_CUBE_OCTET_SEQUENCE_END
+};
+
+// Setup Timeprobes
+ACE_TIMEPROBE_EVENT_DESCRIPTIONS (Cubit_i_Timeprobe_Description,
+ CUBIT_I_CUBE_ONEWAY_START);
+
+#endif /* ACE_ENABLE_TIMEPROBES */
+
+// Constructor
+
+Cubit_Factory_i::Cubit_Factory_i (CORBA::ORB_ptr orb)
+ : my_cubit_ (orb)
+{
+}
+
+// Destructor
+
+Cubit_Factory_i::~Cubit_Factory_i (void)
+{
+}
+
+Cubit_ptr
+Cubit_Factory_i::make_cubit (CORBA::Environment &env)
+{
+ return my_cubit_._this (env);
+}
+
+// Constructor
+
+Cubit_i::Cubit_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+// Destructor
+
+Cubit_i::~Cubit_i (void)
+{
+}
+
+void
+Cubit_i::cube_oneway (CORBA::Environment &)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_ONEWAY_START);
+}
+
+void
+Cubit_i::cube_void (CORBA::Environment &)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_VOID_START);
+}
+
+// Cube an octet
+
+CORBA::Octet
+Cubit_i::cube_octet (CORBA::Octet o,
+ CORBA::Environment &env)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_OCTET_START);
+
+ ACE_UNUSED_ARG (env);
+ return o * o * o;
+}
+
+// Cube a short.
+
+CORBA::Short
+Cubit_i::cube_short (CORBA::Short s,
+ CORBA::Environment &env)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_SHORT_START);
+
+ ACE_UNUSED_ARG (env);
+ return s * s * s;
+}
+
+// Cube a long
+
+CORBA::Long
+Cubit_i::cube_long (CORBA::Long l,
+ CORBA::Environment &env)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_LONG_START);
+
+ ACE_UNUSED_ARG (env);
+ return l * l * l;
+}
+
+// Cube a struct
+
+Cubit::Many
+Cubit_i::cube_struct (const Cubit::Many &values,
+ CORBA::Environment &env)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_STRUCT_START);
+
+ Cubit::Many temp;
+
+ ACE_UNUSED_ARG (env);
+ temp.o = values.o * values.o * values.o;
+ temp.s = values.s * values.s * values.s;
+ temp.l = values.l * values.l * values.l;
+
+ return temp;
+}
+
+// Cube a union
+
+Cubit::oneof
+Cubit_i::cube_union (const Cubit::oneof &values,
+ CORBA::Environment &env)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_UNION_START);
+
+ Cubit::oneof temp;
+
+ ACE_UNUSED_ARG (env);
+ switch (values._d ())
+ {
+ case Cubit::e_0th:
+ temp.o (values.o () * values.o () * values.o ());
+ break;
+ case Cubit::e_1st:
+ temp.s (values.s () * values.s () * values.s ());
+ break;
+ case Cubit::e_2nd:
+ temp.l (values.l () * values.l () * values.l ());
+ break;
+ case Cubit::e_3rd:
+ default:
+ temp._d (values._d ()); // set the discriminant
+ // use the read/write accessor
+ temp.cm ().o = values.cm ().o * values.cm ().o * values.cm ().o;
+ temp.cm ().s = values.cm ().s * values.cm ().s * values.cm ().s;
+ temp.cm ().l = values.cm ().l * values.cm ().l * values.cm ().l;
+
+ }
+ return temp;
+}
+
+// Cube a sequence
+void
+Cubit_i::cube_long_sequence (const Cubit::long_seq &input,
+ Cubit::long_seq_out output,
+ CORBA::Environment &)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_LONG_SEQUENCE_START);
+
+ if (output.ptr () == 0)
+ output = new Cubit::long_seq (input.length ());
+
+ output->length (input.length ());
+
+#if 0
+ for (CORBA::ULong i = 0; i < input.length (); ++i)
+ {
+ CORBA::Long x = input[i];
+ output[i] = x * x * x;
+ }
+#else
+ CORBA::ULong i = 0;
+ CORBA::Long x = input[0];
+ output[i] = x * x * x;
+#endif
+}
+
+// Cube an octet sequence
+void
+Cubit_i::cube_octet_sequence (const Cubit::octet_seq &input,
+ Cubit::octet_seq_out output,
+ CORBA::Environment &)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_OCTET_SEQUENCE_START);
+
+ if (output.ptr () == 0)
+ {
+#if defined (TAO_NO_COPY_OCTET_SEQUENCES)
+ ACE_Message_Block mb (input.length ());
+ mb.wr_ptr (input.length ());
+ output = new Cubit::octet_seq (input.length (), &mb);
+#else
+ output = new Cubit::octet_seq (input.length ());
+#endif /* TAO_NO_COPY_OCTET_SEQUENCES */
+ }
+
+ output->length (input.length ());
+
+#if 0
+ for (CORBA::ULong i = 0; i < input.length (); ++i)
+ {
+ CORBA::Octet x = input[i];
+ output[i] = x * x * x;
+ }
+#else
+ // We don't want to cube all the elements on the sequence because
+ // that will take too long and will affect the performance. Further,
+ // we want to show that octet sequences have constant marshalling
+ // time, but making a copy of each element will hide that.
+ CORBA::ULong i = 0;
+ CORBA::Octet x = input[0];
+ output[i] = x * x * x;
+#endif
+}
+
+void
+Cubit_i::cube_rti_data (const Cubit::RtiPacket &input,
+ Cubit::RtiPacket_out output,
+ CORBA::Environment &)
+{
+ ACE_FUNCTION_TIMEPROBE (CUBIT_I_CUBE_LONG_SEQUENCE_START);
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Input: \n"));
+ print_RtiPacket (input);
+ }
+
+ if (output.ptr () == 0)
+ output = new Cubit::RtiPacket (input);
+
+ output->packetHeader.packetColor
+ = input.packetHeader.packetColor
+ * input.packetHeader.packetColor
+ * input.packetHeader.packetColor;
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Output: \n"));
+ print_RtiPacket (*output.ptr ());
+ }
+}
+
+// Shutdown.
+
+void Cubit_i::shutdown (CORBA::Environment &env)
+{
+ ACE_UNUSED_ARG (env);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "%s\n",
+ "Cubit_i is shutting down"));
+
+ this->orb_->shutdown ();
+}