OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / I386LINUX / util / I386LINUX / doc / mico / examples / dynany / dynany.cc
1 #define MICO_CONF_DYNANY
2 #include <CORBA-SMALL.h>
3 #include "test.h"
4
5
6 CORBA::ORB_var orb;
7 CORBA::BOA_var boa;
8 DynamicAny::DynAnyFactory_var fac;
9
10 void dyn_union ()
11 {
12     DynamicAny::DynAny_var tmp =
13         fac->create_dyn_any_from_type_code (_tc_Union);
14     DynamicAny::DynUnion_var da =
15         DynamicAny::DynUnion::_narrow (tmp);
16
17     DynamicAny::DynEnum_var disc = DynamicAny::DynEnum::_narrow (
18         da->get_discriminator());
19     assert (!CORBA::is_nil (disc));
20
21     da->set_to_default_member ();
22     assert (disc->get_as_ulong() == 2);
23
24     CORBA::Boolean r = da->seek (1);
25     assert (r);
26     DynamicAny::DynAny_var value = da->current_component();
27     value->insert_short (10);
28
29     r = da->seek (1);
30     assert (r);
31     disc->set_as_string ("el2");
32     da->insert_boolean (TRUE);
33
34     da->destroy ();
35 }
36
37 void dyn_seq ()
38 {
39     DynamicAny::DynAny_var tmp =
40         fac->create_dyn_any_from_type_code (_tc_Sequence);
41     DynamicAny::DynSequence_var da =
42         DynamicAny::DynSequence::_narrow (tmp);
43
44     da->set_length (10);
45
46     for (int i = 0; i < 10; ++i) {
47         da->insert_short (i);
48         da->next();
49     }
50
51     CORBA::AnySeq_var seq = da->get_elements();
52     { // sander
53         for (int i = 0; i < 10; ++i) {
54             CORBA::Short s;
55             CORBA::Boolean r = (seq[MICO_ULong(i)] >>= s);
56             assert (r);
57             assert (s == i);
58         }
59     } // sander
60
61     da->destroy ();
62 }
63
64 void dyn_enum ()
65 {
66     DynamicAny::DynAny_var tmp =
67         fac->create_dyn_any_from_type_code (_tc_Enum);
68     DynamicAny::DynEnum_var da =
69         DynamicAny::DynEnum::_narrow (tmp);
70
71     da->set_as_string ("el1");
72     assert (da->get_as_ulong() == 0);
73
74     da->set_as_ulong (1);
75     CORBA::String_var str = da->get_as_string ();
76     assert (!strcmp (str, "el2"));
77
78     da->destroy ();
79 }
80
81 void dyn_struct ()
82 {
83     CORBA::Any a;
84     Struct s;
85     s.l = 10;
86     s.s = (const char *)"foobar";
87     a <<= s;
88     
89     DynamicAny::DynAny_var da = fac->create_dyn_any (a);
90     CORBA::Long l = da->get_long ();
91     assert (l == 10);
92     da->next();
93     CORBA::String_var str = da->get_string ();
94     assert (!strcmp (str, "foobar"));
95
96     CORBA::Any_var av = da->to_any ();
97     assert (a == av);
98
99     da->destroy ();
100 }
101
102 void dyn_basic ()
103 {
104     DynamicAny::DynAny_var da =
105         fac->create_dyn_any_from_type_code (CORBA::_tc_long);
106     da->insert_long (10);
107
108     CORBA::Long l = da->get_long();
109     assert (l == 10);
110
111     da->destroy ();
112 }
113
114 int main (int argc, char *argv[])
115 {
116     // ORB initialization
117     orb = CORBA::ORB_init( argc, argv, "mico-local-orb" );
118     boa = orb->BOA_init (argc, argv, "mico-local-boa");
119
120     CORBA::Object_var obj =
121         orb->resolve_initial_references ("DynAnyFactory");
122     fac = DynamicAny::DynAnyFactory::_narrow (obj);
123
124     dyn_basic ();
125     dyn_struct ();
126     dyn_enum ();
127     dyn_seq ();
128     dyn_union ();
129     return 0;
130 }