[omniORB] Looking for examples of sequence manipulation

Carlos carlos at canama.net
Fri Mar 30 02:09:59 BST 2007


El vie, 30-03-2007 a las 00:55 +0200, Carlos escribió:
> El jue, 29-03-2007 a las 08:37 -0700, Perham, David A. (Mission Systems)
> escribió:
> > Thanks for the post. 
> > 
> > I must still be doing something wrong.
> > 
> > This is a sample of the code I am trying to implement:
> > 
> > // IDL
> > 
> > typedef sequence <EntityInventoryType, 10> EntityInventorySequence ;
> > 
> > // Impl
> > 
> > bool ObjectServerImpl::RequestEntityInventory( long EntityId,				                    EntityInventorySequence_out	 EntityInventory ) 
> > {
> > 	EntityInventorySequence*& ptr =  EntityInventory.ptr() ;
> >       (*ptr)[0].InventoryCode = 5 ;
> > }
> 
> // At first you must allocate memory for the sequence
> 
> EntityInventorySequence*& ptr =  EntityInventory.ptr() ;
> ptr = new EntityInventorySequence;
> 
> // or directly
> 
> EntityInventory.ptr() = new EntityInventorySequence;
> 
> // Second you must set the sequence length, because is a bounded
> // sequence length must be less or equal than the limit
> // (10 in your case), I only set an element
> // In my previous message I did a mistake if the sequence is unbounded
> // the contructor Seq(ULong) sets the maximum sequence length,
> // but not the current length so you must indicate the current
> // length like to bounded sequence.
> 
> ptr->length(1);
> 
> // Now you can assign the InventoryCode
> 
> (*ptr)[0].InventoryCode = 5;

SORRY my english isn't good and perhaps I don't undertand you. I'm
assuming EntityInventoryType is

// IDL
struct EntityInventoryType {
	short InventoryCode;
	....
}

// C++
(*ptr)[0].InventoryCode = 5;

is correct but if EntityInventoryType is 

// IDL

typedef short EntityInventoryType;

// C++
(*ptr)[0] = 5;

Cheers.

> 
> // and at last because your function is bool f(...)
> 
> return true;
> 
> I expect this help you.
> 
> Cheers
> 
> > 
> > This builds, however I am not very confident that it is correct, because the .NET intellisensor tool is not filling out the "InventoryCode" when I type "(*ptr)[0].".
> > 
> > Am I still missing something?
> > 
> > Thanks again for the help, I still haven't found any examples on the net.
> > 
> > Take care 
> > 
> > -----Original Message-----
> > From: Carlos [mailto:carlos at canama.net] 
> > Sent: Wednesday, March 28, 2007 4:04 PM
> > To: Perham, David A. (Mission Systems)
> > Cc: omniorb-list at omniorb-support.com
> > Subject: Re: [omniORB] Looking for examples of sequence manipulation
> > 
> > El mié, 28-03-2007 a las 10:48 -0700, Perham, David A. (Mission Systems)
> > escribió:
> > > Howdy:
> > > 
> > > Looking for tips on how to manipulate sequences I came across this 
> > > example in the mailing list archives.
> > > The example demonstrates how to create the sequence in idl, and how to 
> > > pass a pointer to the sequence in the implementation code.
> > > Unfortunately, it does not show the syntax required to access this 
> > > pointer within the implementation after it is created.  In other 
> > > words, after
> > > 
> > >  ptx = new MyInterface::randSeq(len,len,p);
> > > 
> > > I'd like to do something with the sequence, like assign a value to 
> > > something within it.
> > > For example if I have declared a sequence like this in IDL Typedef 
> > > struct theStruct {
> > >         short x ; 
> > >         short y ;
> > > } theStructType ;
> > > Typedef sequence <theStructType> theStructSeq ; Boolean 
> > > DoSomethingWithTheStructSeq( out theStructSeq myStructSeq) ;
> > > 
> > > And the implementation has
> > > Bool DoSomethingWithTheStructSeq( theStructSeq_out ss ) {
> > >    theStructSeq *& ptx = ss.ptr() ; 
> > >    ptx = new theStructSeq(3) ;
> > > 
> > > }
> > > 
> > > What is the syntax to assign a value to 'x' within an element of the 
> > > sequence?
> > 
> > (*ptx)[0].x = 29;
> > 
> > for example
> > 
> > and if you want to populate all the sequence
> > 
> > for (CORBA::ULong i = 0; i < ptx->length(); i++) {
> > 	(*ptx)[i].x = ...;
> > 	(*ptx)[i].y = ...;
> > }
> > 
> > I expect this helps you.
> > 
> > Cheers.
> > 
> > > Thanks,
> > > Dave P
> > > > Howdy,
> > > > Hope the following sample helps you.  
> > > > 
> > > > IDL: > interface MyInterface
> > > > {
> > > > typedef sequence<octet> randSeq;
> > > > void getRandSeq( out randSeq tx ); }
> > > > 
> > > > Object Implementation:  
> > > > void MyInterface_i::getRandSeq( randSeq_out tx )
> > >  > {
> > > > MyInterface::randSeq*& ptx = tx.ptr(); //.... > CORBA::Octet* p = 
> > > > new CORBA::Octet[ len ]; //....
> > > > ptx = new MyInterface::randSeq(len,len,p); }
> > >  >
> > > > Client: > void hello( MyInterface_ptr e ) { MyInterface::randSeq_var 
> > > > tx;
> > > > e->getRandSeq( tx.out() );
> > > > long len = tx.length();
> > > > for ( i = 0; i < len; i++ )
> > > > {
> > > > cout << tx[i] << endl; // access
> > >  > }
> > > > } 
> > > 
> > > _______________________________________________
> > > omniORB-list mailing list
> > > omniORB-list at omniorb-support.com
> > > http://www.omniorb-support.com/mailman/listinfo/omniorb-list
> > 
> > 
> > 
> 
> 
> _______________________________________________
> omniORB-list mailing list
> omniORB-list at omniorb-support.com
> http://www.omniorb-support.com/mailman/listinfo/omniorb-list
> 
> 




More information about the omniORB-list mailing list