summaryrefslogtreecommitdiff
path: root/ACE/TAO/examples/TypeCode_Creation/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/examples/TypeCode_Creation/main.cpp')
-rw-r--r--ACE/TAO/examples/TypeCode_Creation/main.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/ACE/TAO/examples/TypeCode_Creation/main.cpp b/ACE/TAO/examples/TypeCode_Creation/main.cpp
new file mode 100644
index 00000000000..d89a688bec2
--- /dev/null
+++ b/ACE/TAO/examples/TypeCode_Creation/main.cpp
@@ -0,0 +1,110 @@
+// $Id$
+
+#include "testC.h"
+#include "tao/IFR_Client/IFR_BasicC.h"
+#include "tao/TypeCodeFactory/TypeCodeFactory_Adapter_Impl.h"
+
+ACE_RCSID(TypeCode_Creation, main, "$Id$")
+
+int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::TypeCode_var iface_tc =
+ orb->create_interface_tc (CORBA::string_dup ("IDL:iface:1.0"),
+ CORBA::string_dup ("iface"));
+
+ CORBA::ULong length = 5;
+
+ CORBA::UnionMemberSeq foo_members (length);
+ foo_members.length (length);
+
+ // The first three members are multiple case labels for a
+ // single string member. The label values are not in order
+ // or consecutive.
+
+ foo_members[0].name = CORBA::string_dup ("foo_str_member");
+
+ // The type member of the UnionMember takes ownership.
+ foo_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
+
+ // Not needed for ORB-created typecodes
+ // (see CORBA 2.4.2 section 10.7.3).
+ foo_members[0].type_def = CORBA::IDLType::_nil ();
+ CORBA::Short label_value = 3;
+ foo_members[0].label <<= label_value;
+
+ foo_members[1].name = CORBA::string_dup ("foo_str_member");
+ foo_members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
+ foo_members[1].type_def = CORBA::IDLType::_nil ();
+ label_value = 4;
+ foo_members[1].label <<= label_value;
+
+ foo_members[2].name = CORBA::string_dup ("foo_str_member");
+ foo_members[2].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
+ foo_members[2].type_def = CORBA::IDLType::_nil ();
+ label_value = 1;
+ foo_members[2].label <<= label_value;
+
+ // The default member.
+ foo_members[3].name = CORBA::string_dup ("foo_iface_member");
+ foo_members[3].type = CORBA::TypeCode::_duplicate (iface_tc.in ());
+ foo_members[3].type_def = CORBA::IDLType::_nil ();
+ CORBA::Octet default_label_value = 0;
+ foo_members[3].label <<= CORBA::Any::from_octet (default_label_value);
+
+ // The last member is the same type as the previous one, but has
+ // a different name.
+ foo_members[4].name = CORBA::string_dup ("foo_iface_member2");
+ foo_members[4].type = CORBA::TypeCode::_duplicate (iface_tc.in ());
+ foo_members[4].type_def = CORBA::IDLType::_nil ();
+ label_value = 0;
+ foo_members[4].label <<= label_value;
+
+ CORBA::TypeCode_ptr foo_tc = orb->create_union_tc ("IDL:foo:1.0",
+ "foo",
+ CORBA::_tc_short,
+ foo_members);
+
+ length = 2;
+
+ CORBA::StructMemberSeq bar_members (length);
+ bar_members.length (length);
+
+ bar_members[0].name = CORBA::string_dup ("bar_long_member");
+ bar_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_long);
+
+ bar_members[0].type_def = CORBA::IDLType::_nil ();
+
+ bar_members[1].name = CORBA::string_dup ("bar_foo_member");
+
+ bar_members[1].type = foo_tc;
+
+ bar_members[1].type_def = CORBA::IDLType::_nil ();
+
+ CORBA::TypeCode_var bar_tc = orb->create_struct_tc ("IDL:bar:1.0",
+ "bar",
+ bar_members);
+
+ // Check for equality with the typecode created by the IDL compiler.
+ CORBA::Boolean eq = bar_tc->equal (_tc_bar);
+
+ if (!eq)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ORB-created typecode not correct!\n"),
+ -1);
+
+ }
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("exception:");
+ return 1;
+ }
+
+ return 0;
+}
+