[omniORB] Sequence mapping to c++

Martin Trappel 0xCDCDCDCD at gmx.at
Fri Oct 3 08:55:47 BST 2008


Vázquez Landa wrote:
> Hi, 
> 
> I'm a total newb to corba, and I'm developing a little application to interact with java and a database and and and...  Anyway, I was wondering if there's a way around CORBA's mapping for a sequence. I would like to be able to use a vector in c++. Is it possible to use vectors and CORBA at the same time?  If so, how would I define a vector in idl?
> 

You can't really get around the sequences on the interface side, but 
there's nothing to prevent you from using vector<>s in your implementaton.
Here's what I use for conversion:

template<class SEQ_T, class COLL_T>
inline SEQ_T* assign_stl_value_sequence(SEQ_T* seq, const COLL_T& coll) {
	seq->length(coll.size());
	int i=0;
	BOOST_FOREACH(const COLL_T::value_type& val, coll) {
		(*seq)[i++] = val;
	}
	return seq;
}
...
std::set<double> values;
...
return assign_stl_value_sequence(new DoubleSeq, values);

coll would be a vector. BOOST_FOREACH is easily replaced by a simple for 
loop if you don't want to use boost.
If you have a collection of interface pointers you need to use _this(). 
If you have corba strings you probably want to use
(*seq)[i++] = CORBA::string_dup(val.c_str());

br,
Martin



More information about the omniORB-list mailing list