diff options
Diffstat (limited to 'trunk/TAO/tests/Param_Test/var_struct.cpp')
-rw-r--r-- | trunk/TAO/tests/Param_Test/var_struct.cpp | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/trunk/TAO/tests/Param_Test/var_struct.cpp b/trunk/TAO/tests/Param_Test/var_struct.cpp new file mode 100644 index 00000000000..679ed7b3db3 --- /dev/null +++ b/trunk/TAO/tests/Param_Test/var_struct.cpp @@ -0,0 +1,274 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/tests/Param_Test +// +// = FILENAME +// var_struct.cpp +// +// = DESCRIPTION +// test variable sized structures +// +// = AUTHORS +// Aniruddha Gokhale +// +// ============================================================================ + +#include "helper.h" +#include "var_struct.h" + +ACE_RCSID (Param_Test, + var_struct, + "$Id$") + +// ************************************************************************ +// Test_Var_Struct +// ************************************************************************ + +Test_Var_Struct::Test_Var_Struct (void) + : opname_ (CORBA::string_dup ("test_var_struct")), + inout_ (new Param_Test::Var_Struct), + out_ (new Param_Test::Var_Struct), + ret_ (new Param_Test::Var_Struct) +{ +} + +Test_Var_Struct::~Test_Var_Struct (void) +{ + CORBA::string_free (this->opname_); + this->opname_ = 0; + // the other data members will be freed as they are "_var"s and objects + // (rather than pointers to objects) +} + +const char * +Test_Var_Struct::opname (void) const +{ + return this->opname_; +} + +void +Test_Var_Struct::dii_req_invoke (CORBA::Request *req + ACE_ENV_ARG_DECL) +{ + req->add_in_arg ("s1") <<= this->in_; + req->add_inout_arg ("s2") <<= this->inout_.in (); + req->add_out_arg ("s3") <<= this->out_.in (); + + req->set_return_type (Param_Test::_tc_Var_Struct); + + req->invoke (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + Param_Test::Var_Struct *tmp; + req->return_value () >>= tmp; + this->ret_ = new Param_Test::Var_Struct (*tmp); + + CORBA::NamedValue_ptr o2 = + req->arguments ()->item (1 ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + *o2->value () >>= tmp; + this->inout_ = new Param_Test::Var_Struct (*tmp); + + CORBA::NamedValue_ptr o3 = + req->arguments ()->item (2 ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + *o3->value () >>= tmp; + this->out_ = new Param_Test::Var_Struct (*tmp); +} + +int +Test_Var_Struct::init_parameters (Param_Test_ptr + ACE_ENV_ARG_DECL_NOT_USED) +{ + Generator *gen = GENERATOR::instance (); // value generator + + // get some sequence length (not more than 10) + CORBA::ULong len = (CORBA::ULong) (gen->gen_long () % 10) + 1; + + this->in_.dbl = 3.14159; + this->in_.dummy1 = gen->gen_string (); + this->in_.boole = gen->gen_short () % 2; + this->in_.dummy2 = gen->gen_string (); + this->in_.shrt = gen->gen_short (); + // set the length of the sequence + this->in_.seq.length (len); + + // now set each individual element + for (CORBA::ULong i = 0; i < this->in_.seq.length (); i++) + { + // generate some arbitrary string to be filled into the ith location in + // the sequence + char *str = gen->gen_string (); + this->in_.seq[i] = str; + } + + this->inout_->dbl = 0.0; + this->inout_->dummy1 = CORBA::string_dup (""); + this->inout_->boole = 0; + this->inout_->dummy2 = CORBA::string_dup (""); + this->inout_->shrt = 0; + // set the length of the sequence + this->inout_->seq.length (0); + + return 0; +} + +int +Test_Var_Struct::reset_parameters (void) +{ + this->inout_ = new Param_Test::Var_Struct; // delete the previous ones + this->out_ = new Param_Test::Var_Struct; + this->ret_ = new Param_Test::Var_Struct; + + this->inout_->dbl = 0.0; + this->inout_->dummy1 = CORBA::string_dup (""); + this->inout_->boole = 0; + this->inout_->dummy2 = CORBA::string_dup (""); + this->inout_->shrt = 0; + // set the length of the sequence + this->inout_->seq.length (0); + + return 0; +} + +int +Test_Var_Struct::run_sii_test (Param_Test_ptr objref + ACE_ENV_ARG_DECL) +{ + ACE_TRY + { + Param_Test::Var_Struct_out out (this->out_.out ()); + this->ret_ = objref->test_var_struct (this->in_, + this->inout_.inout (), + out + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + return 0; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "Test_Var_Struct::run_sii_test\n"); + + } + ACE_ENDTRY; + return -1; +} + +CORBA::Boolean +Test_Var_Struct::check_validity (void) +{ + CORBA::Boolean flag = 0; + if (this->in_.dbl == this->inout_->dbl && + this->in_.dbl == this->out_->dbl && + this->in_.dbl == this->ret_->dbl && + (!ACE_OS::strcmp (this->in_.dummy1, this->inout_->dummy1)) && + (!ACE_OS::strcmp (this->in_.dummy1, this->out_->dummy1)) && + (!ACE_OS::strcmp (this->in_.dummy1, this->ret_->dummy1)) && + this->in_.boole == this->inout_->boole && + this->in_.boole == this->out_->boole && + this->in_.boole == this->ret_->boole && + (!ACE_OS::strcmp (this->in_.dummy2, this->inout_->dummy2)) && + (!ACE_OS::strcmp (this->in_.dummy2, this->out_->dummy2)) && + (!ACE_OS::strcmp (this->in_.dummy2, this->ret_->dummy2)) && + this->in_.shrt == this->inout_->shrt && + this->in_.shrt == this->out_->shrt && + this->in_.shrt == this->ret_->shrt && + (this->in_.seq.length () == this->inout_->seq.length ()) && + (this->in_.seq.length () == this->out_->seq.length ()) && + (this->in_.seq.length () == this->ret_->seq.length ())) + { + flag = 1; // assume all are equal + // lengths are same. Now compare the contents + for (CORBA::ULong i=0; i < this->in_.seq.length () && flag; i++) + { + if (ACE_OS::strcmp (this->in_.seq[i], this->inout_->seq[i]) || + ACE_OS::strcmp (this->in_.seq[i], this->out_->seq[i]) || + ACE_OS::strcmp (this->in_.seq[i], this->ret_->seq[i])) + // not equal + flag = 0; + } + } + return flag; +} + +CORBA::Boolean +Test_Var_Struct::check_validity (CORBA::Request_ptr ) +{ + return this->check_validity (); +} + +void +Test_Var_Struct::print_values (void) +{ + ACE_DEBUG ((LM_DEBUG, + "\n*=*=*=*=*=*=*=*=*=*=\n" + "in_.dummy1 = %s\n" + "inout_.dummy1 = %s\n" + "out_.dummy1 = %s\n" + "ret_.dummy1 = %s\n", + this->in_.dummy1.in (), + this->inout_->dummy1.in (), + this->out_->dummy1.in (), + this->ret_->dummy1.in ())); + + ACE_DEBUG ((LM_DEBUG, + "\n*=*=*=*=*=*=*=*=*=*=\n" + "in_.dummy2 = %s\n" + "inout_.dummy2 = %s\n" + "out_.dummy2 = %s\n" + "ret_.dummy2 = %s\n", + this->in_.dummy2.in (), + this->inout_->dummy2.in (), + this->out_->dummy2.in (), + this->ret_->dummy2.in ())); + + CORBA::ULong i; + ACE_DEBUG ((LM_DEBUG, "\n*=*=*=*=*=*=*=*=*=*=\n")); + for (i=0; i < this->in_.seq.length (); i++) + { + ACE_DEBUG ((LM_DEBUG, + "Element #%d\n" + "in.seq : %s\n", + i, + (this->in_.seq[i]? (const char *)this->in_.seq[i]:"<nul>"))); + } + ACE_DEBUG ((LM_DEBUG, "\n*=*=*=*=*=*=*=*=*=*=\n")); + for (i=0; this->inout_.ptr () && (i < this->inout_->seq.length ()); i++) + { + ACE_DEBUG ((LM_DEBUG, + "Element #%d\n" + "inout : %s\n", + i, + (this->inout_->seq[i]? (const char *)this->inout_->seq[i]:"<nul>"))); + } + if (!this->inout_.ptr ()) + ACE_DEBUG ((LM_DEBUG, "\ninout struct does not exist\n")); + ACE_DEBUG ((LM_DEBUG, "\n*=*=*=*=*=*=*=*=*=*=\n")); + for (i=0; this->out_.ptr () && (i < this->out_->seq.length ()); i++) + { + ACE_DEBUG ((LM_DEBUG, + "Element #%d\n" + "in : %s\n", + i, + (this->out_->seq[i]? (const char *)this->out_->seq[i]:"<nul>"))); + } + if (!this->out_.ptr ()) + ACE_DEBUG ((LM_DEBUG, "\nout struct is NUL\n")); + ACE_DEBUG ((LM_DEBUG, "\n*=*=*=*=*=*=*=*=*=*=\n")); + for (i=0; this->ret_.ptr () && (i < this->ret_->seq.length ()); i++) + { + ACE_DEBUG ((LM_DEBUG, + "Element #%d\n" + "in : %s\n", + i, + (this->ret_->seq[i]? (const char *)this->ret_->seq[i]:"<nul>"))); + } + if (!this->ret_.ptr ()) + ACE_DEBUG ((LM_DEBUG, "\nret struct is NUL\n")); + ACE_DEBUG ((LM_DEBUG, "\n*=*=*=*=*=*=*=*=*=*=\n")); +} |