[omniORB] omni3.0.2: string sequence _var lacks constoperator[]
Gary D. Duzan
gdd0@gte.com
Wed, 27 Dec 2000 14:15:16 -0500
In Message <3A4A2B1D.E3A617AF@tumbleweed.com> ,
randy.shoup@tumbleweed.com wrote:
=>I did a little research on my own, and it looks like this is a bug.
=>
=>In section 6.19.1 of "Advanced CORBA Programming in C++", it claims that
=>the _var class of a sequence<T> should contain both of the following
=>methods:
=>
=> T & operator[](CORBA:ULong);
=> const T & operator[](CORBA::ULong) const;
Ah, but that book is not the spec. In the IDL/C++ Mapping v2.3.1,
we have:
1.13.4 Sequence T_var and T_out Types
In addition to the regular operations defined for T_var and T_out
types, the T_var and T_out for a sequence type also supports an
overloaded operator[] that forwards requests to the operator[]
of the underlying sequence. [footnote 12] This subscript operator
should have the same return type as that of the corresponding
operator on the underlying sequence type.
[12] Note that since T_var and T_out types do not handle const
T*, there is no need to pro-vide the const version of
operator[] for Sequence_var and Sequence_out types.
So omniORB is correct.
Gary Duzan
Verizon Laboratories
=>randy.shoup@tumbleweed.com wrote:
=>>
=>> We have been using omni2.* for a while, and now we are looking into
=>> moving to omni3. I encountered the following problem:
=>>
=>> We have the following in our IDL:
=>> typedef sequence<string> StringArray;
=>>
=>> omni2 mapped StringArray in the following way:
=>> typedef _CORBA_Unbounded_Sequence<CORBA::String_member > StringArray;
=>> typedef _CORBA_Sequence_Var<StringArray, CORBA::String_member >
=>> StringArray_var;
=>>
=>> StringArray_var ended up with an operator[] const. And we made use of
=>> the fact in our code that we could extract elements from a const
=>> StringArray_var.
=>>
=>> However, omni3 maps these types to new classes:
=>> class StringArray : public _CORBA_Unbounded_Sequence__String {
=>> ...
=>> class StringArray_var {
=>> ...
=>>
=>> and does not generate an operator[] const. The only
=>> StringArray_var::operator[] is
=>> inline _CORBA_String_element operator [] (_CORBA_ULong s) {
=>> return (*_pd_seq)[s];
=>> }
=>>
=>> which is non-const.
=>>
=>> Because it seems to use the StringArray directly, and *that* class has
=>> an operator[] const, why does the StringArray_var not have an operator[]
=>> const?
=>>
=>> Is this a bug, or a CORBA 2.3 mapping change?
=>>
=>> Thanks,
=>> -- Randy
=>> _________________________________________________________________
=>> Randy Shoup (650)216-2038
=>> Senior Architect rshoup@tumbleweed.com
=>> Tumbleweed Communications Corporation
=>
=>
=>--
=>
=>-- Randy
=>_________________________________________________________________
=>Randy Shoup (650)216-2038
=>Senior Architect rshoup@tumbleweed.com
=>Tumbleweed Communications Corporation
=>
=>