diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/Ice/Stream.h | 12 | ||||
-rw-r--r-- | cpp/include/Ice/StreamTraits.h | 1 | ||||
-rw-r--r-- | cpp/src/Ice/StreamI.cpp | 18 | ||||
-rwxr-xr-x | cpp/src/Slice/RubyUtil.cpp | 32 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 24 | ||||
-rw-r--r-- | cpp/test/Ice/optional/Test.ice | 93 | ||||
-rw-r--r-- | cpp/test/Ice/optional/TestI.cpp | 218 | ||||
-rw-r--r-- | cpp/test/Ice/optional/TestI.h | 139 |
8 files changed, 448 insertions, 89 deletions
diff --git a/cpp/include/Ice/Stream.h b/cpp/include/Ice/Stream.h index 9dda1497006..68213ec008b 100644 --- a/cpp/include/Ice/Stream.h +++ b/cpp/include/Ice/Stream.h @@ -63,8 +63,6 @@ public: ~UserExceptionReader() throw(); virtual void read(const InputStreamPtr&) const = 0; - virtual bool usesClasses() const = 0; - virtual void usesClasses(bool) = 0; virtual ::std::string ice_name() const = 0; virtual UserException* ice_clone() const = 0; @@ -73,9 +71,6 @@ public: virtual void __write(IceInternal::BasicStream*) const; virtual void __read(IceInternal::BasicStream*); - virtual bool __usesClasses() const; - virtual void __usesClasses(bool); - protected: const CommunicatorPtr _communicator; @@ -394,7 +389,6 @@ public: ~UserExceptionWriter() throw(); virtual void write(const OutputStreamPtr&) const = 0; - virtual bool usesClasses() const = 0; virtual ::std::string ice_name() const = 0; virtual UserException* ice_clone() const = 0; @@ -403,12 +397,6 @@ public: virtual void __write(IceInternal::BasicStream*) const; virtual void __read(IceInternal::BasicStream*); - virtual bool __usesClasses() const; - -#ifdef __SUNPRO_CC - using UserException::__usesClasses; -#endif - protected: const CommunicatorPtr _communicator; diff --git a/cpp/include/Ice/StreamTraits.h b/cpp/include/Ice/StreamTraits.h index 2316964d782..8dfce94a0b1 100644 --- a/cpp/include/Ice/StreamTraits.h +++ b/cpp/include/Ice/StreamTraits.h @@ -116,7 +116,6 @@ struct StreamTrait static const bool fixedLength = false; }; - // // StreamTrait specialization for array / range mapped sequences // The type can be a std::pair<T, T> or a diff --git a/cpp/src/Ice/StreamI.cpp b/cpp/src/Ice/StreamI.cpp index 0cb438049c7..55aa9b50fd9 100644 --- a/cpp/src/Ice/StreamI.cpp +++ b/cpp/src/Ice/StreamI.cpp @@ -80,18 +80,6 @@ UserExceptionReader::__read(BasicStream* is) read(stream); } -bool -UserExceptionReader::__usesClasses() const -{ - return usesClasses(); -} - -void -UserExceptionReader::__usesClasses(bool b) -{ - usesClasses(b); -} - // // InputStreamI // @@ -790,9 +778,3 @@ UserExceptionWriter::__read(BasicStream*) { assert(false); } - -bool -UserExceptionWriter::__usesClasses() const -{ - return usesClasses(); -} diff --git a/cpp/src/Slice/RubyUtil.cpp b/cpp/src/Slice/RubyUtil.cpp index d5f8f771a13..3922d6cbbf2 100755 --- a/cpp/src/Slice/RubyUtil.cpp +++ b/cpp/src/Slice/RubyUtil.cpp @@ -622,8 +622,6 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) // // Interfaces // - // TODO: Necessary? - // { int interfaceCount = 0; for(ClassList::const_iterator q = bases.begin(); q != bases.end(); ++q) @@ -644,7 +642,7 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) // // Data members are represented as an array: // - // ['MemberName', MemberType] + // ['MemberName', MemberType, Optional, Tag] // // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type. // @@ -663,7 +661,8 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) } _out << "['" << fixIdent((*q)->name(), IdentNormal) << "', "; writeType((*q)->type()); - _out << ']'; + _out << ", " << ((*q)->optional() ? "true" : "false") << ", " << ((*q)->optional() ? (*q)->tag() : 0) + << ']'; } } if(members.size() > 1) @@ -677,7 +676,7 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) // // Define each operation. The arguments to __defineOperation are: // - // 'opName', Mode, IsAmd, FormatType, [InParams], [OutParams], ReturnType, [Exceptions] + // 'opName', Mode, IsAmd, FormatType, [InParams], [OutParams], ReturnParam, [Exceptions] // // where InParams and OutParams are arrays of type descriptions, and Exceptions // is an array of exception types. @@ -747,7 +746,10 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) { _out << ", "; } + _out << '['; writeType((*t)->type()); + _out << ", " << ((*t)->optional() ? "true" : "false") << ", " + << ((*t)->optional() ? (*t)->tag() : 0) << ']'; ++count; } } @@ -760,7 +762,10 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) { _out << ", "; } + _out << '['; writeType((*t)->type()); + _out << ", " << ((*t)->optional() ? "true" : "false") << ", " + << ((*t)->optional() ? (*t)->tag() : 0) << ']'; ++count; } } @@ -768,7 +773,15 @@ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) TypePtr returnType = (*s)->returnType(); if(returnType) { + // + // The return type has the same format as an in/out parameter: + // + // Type, Optional?, OptionalTag + // + _out << '['; writeType(returnType); + _out << ", " << ((*s)->returnIsOptional() ? "true" : "false") << ", " + << ((*s)->returnIsOptional() ? (*s)->returnTag() : 0) << ']'; } else { @@ -932,7 +945,7 @@ Slice::Ruby::CodeVisitor::visitExceptionStart(const ExceptionPtr& p) // // Data members are represented as an array: // - // ['MemberName', MemberType] + // ['MemberName', MemberType, Optional, Tag] // // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type. // @@ -944,7 +957,8 @@ Slice::Ruby::CodeVisitor::visitExceptionStart(const ExceptionPtr& p) } _out << "[\"" << fixIdent((*dmli)->name(), IdentNormal) << "\", "; writeType((*dmli)->type()); - _out << ']'; + _out << ", " << ((*dmli)->optional() ? "true" : "false") << ", " << ((*dmli)->optional() ? (*dmli)->tag() : 0) + << ']'; } if(members.size() > 1) { @@ -1604,6 +1618,10 @@ Slice::Ruby::CodeVisitor::writeConstructorParams(const MemberInfoList& members) { writeConstantValue(member->type(), member->defaultValueType(), member->defaultValue()); } + else if(member->optional()) + { + _out << "::Ice::Unset"; + } else { _out << getInitializer(member->type()); diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index e46b5aeae43..1edb081c9ad 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -4581,7 +4581,17 @@ Slice::Gen::ObjectVisitor::emitGCFunctions(const ClassDefPtr& p) { if((*i)->type()->usesClasses()) { - emitGCInsertCode((*i)->type(), getDataMemberRef(*i), "", 0); + if((*i)->optional()) + { + C << nl << "if(" << fixKwd((*i)->name()) << ')'; + C << sb; + emitGCInsertCode((*i)->type(), getDataMemberRef(*i), "", 0); + C << eb; + } + else + { + emitGCInsertCode((*i)->type(), getDataMemberRef(*i), "", 0); + } } } C << eb; @@ -4617,7 +4627,17 @@ Slice::Gen::ObjectVisitor::emitGCFunctions(const ClassDefPtr& p) { if((*j)->type()->usesClasses()) { - emitGCClearCode((*j)->type(), getDataMemberRef(*j), "", 0); + if((*j)->optional()) + { + C << nl << "if(" << fixKwd((*j)->name()) << ')'; + C << sb; + emitGCClearCode((*j)->type(), getDataMemberRef(*j), "", 0); + C << eb; + } + else + { + emitGCClearCode((*j)->type(), getDataMemberRef(*j), "", 0); + } } } C << eb; diff --git a/cpp/test/Ice/optional/Test.ice b/cpp/test/Ice/optional/Test.ice index ab306459ab1..4fcf2c6e092 100644 --- a/cpp/test/Ice/optional/Test.ice +++ b/cpp/test/Ice/optional/Test.ice @@ -24,9 +24,14 @@ enum MyEnum MyEnumMember }; +struct SmallStruct +{ + byte m; +}; + struct FixedStruct { - int m; + int m; }; struct VarStruct @@ -42,15 +47,22 @@ struct VarStruct sequence<byte> ByteSeq; sequence<bool> BoolSeq; sequence<short> ShortSeq; +sequence<int> IntSeq; +sequence<long> LongSeq; +sequence<float> FloatSeq; +sequence<double> DoubleSeq; sequence<string> StringSeq; sequence<MyEnum> MyEnumSeq; +sequence<SmallStruct> SmallStructSeq; +["cpp:type:std::list< ::Test::SmallStruct>"] sequence<SmallStruct> SmallStructList; sequence<FixedStruct> FixedStructSeq; +["cpp:type:std::list< ::Test::FixedStruct>"] sequence<FixedStruct> FixedStructList; sequence<VarStruct> VarStructSeq; sequence<OneOptional> OneOptionalSeq; sequence<OneOptional*> OneOptionalPrxSeq; -dictionary<int, int> IntIntDict; -dictionary<string, int> StringIntDict; +dictionary<int, int> IntIntDict; +dictionary<string, int> StringIntDict; dictionary<int, MyEnum> IntEnumDict; dictionary<int, FixedStruct> IntFixedStructDict; dictionary<int, VarStruct> IntVarStructDict; @@ -127,6 +139,18 @@ exception OptionalException optional(50) OneOptional o; }; +exception DerivedException extends OptionalException +{ + optional(600) string ss = "test"; + optional(601) OneOptional o2; +}; + +exception RequiredException extends OptionalException +{ + string ss = "test"; + OneOptional o2; +}; + class OptionalWithCustom { ["cpp:type:std::list< ::Ice::Byte>"] optional(1) ByteSeq bs; @@ -142,35 +166,84 @@ class Initial void opOptionalException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) throws OptionalException; + void opDerivedException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + void opRequiredException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + optional(1) byte opByte(optional(2) byte p1, out optional(3) byte p3); + optional(1) bool opBool(optional(2) bool p1, out optional(3) bool p3); + + optional(1) short opShort(optional(2) short p1, out optional(3) short p3); + + optional(1) int opInt(optional(2) int p1, out optional(3) int p3); + optional(3) long opLong(optional(1) long p1, out optional(2) long p3); + optional(1) float opFloat(optional(2) float p1, out optional(3) float p3); + + optional(1) double opDouble(optional(2) double p1, out optional(3) double p3); + optional(1) string opString(optional(2) string p1, out optional(3) string p3); + optional(1) MyEnum opMyEnum(optional(2) MyEnum p1, out optional(3) MyEnum p3); + + optional(1) SmallStruct opSmallStruct(optional(2) SmallStruct p1, out optional(3) SmallStruct p3); + + optional(1) FixedStruct opFixedStruct(optional(2) FixedStruct p1, out optional(3) FixedStruct p3); + + optional(1) VarStruct opVarStruct(optional(2) VarStruct p1, out optional(3) VarStruct p3); + optional(1) OneOptional opOneOptional(optional(2) OneOptional p1, out optional(3) OneOptional p3); optional(1) OneOptional* opOneOptionalProxy(optional(2) OneOptional* p1, out optional(3) OneOptional* p3); // Custom mapping operations - ["cpp:array"] optional(1) ByteSeq opByteSeq(["cpp:array"] optional(2) ByteSeq p1, + ["cpp:array"] optional(1) ByteSeq opByteSeq(["cpp:array"] optional(2) ByteSeq p1, out ["cpp:array"] optional(3) ByteSeq p3); - ["cpp:array"] optional(1) ShortSeq opShortSeq(["cpp:array"] optional(2) ShortSeq p1, + ["cpp:array"] optional(1) BoolSeq opBoolSeq(["cpp:array"] optional(2) BoolSeq p1, + out ["cpp:array"] optional(3) BoolSeq p3); + + ["cpp:array"] optional(1) ShortSeq opShortSeq(["cpp:array"] optional(2) ShortSeq p1, out ["cpp:array"] optional(3) ShortSeq p3); - ["cpp:range:array"] optional(1) BoolSeq opBoolSeq(["cpp:range:array"] optional(2) BoolSeq p1, - out ["cpp:range:array"] optional(3) BoolSeq p3); + ["cpp:range:array"] optional(1) IntSeq opIntSeq(["cpp:range:array"] optional(2) IntSeq p1, + out ["cpp:range:array"] optional(3) IntSeq p3); + + ["cpp:range:array"] optional(1) LongSeq opLongSeq(["cpp:range:array"] optional(2) LongSeq p1, + out ["cpp:range:array"] optional(3) LongSeq p3); - ["cpp:range"] optional(1) StringSeq opStringSeq(["cpp:range"] optional(2) StringSeq p1, + ["cpp:range:array"] optional(1) FloatSeq opFloatSeq(["cpp:range:array"] optional(2) FloatSeq p1, + out ["cpp:range:array"] optional(3) FloatSeq p3); + + ["cpp:range:array"] optional(1) DoubleSeq opDoubleSeq(["cpp:range:array"] optional(2) DoubleSeq p1, + out ["cpp:range:array"] optional(3) DoubleSeq p3); + + ["cpp:range"] optional(1) StringSeq opStringSeq(["cpp:range"] optional(2) StringSeq p1, out ["cpp:range"] optional(3) StringSeq p3); - ["cpp:array"] optional(1) FixedStructSeq opFixedStructSeq(["cpp:array"] optional(2) FixedStructSeq p1, + ["cpp:array"] optional(1) SmallStructSeq opSmallStructSeq(["cpp:array"] optional(2) SmallStructSeq p1, + out ["cpp:array"] optional(3) SmallStructSeq p3); + + ["cpp:array"] optional(1) SmallStructList opSmallStructList(["cpp:array"] optional(2) SmallStructList p1, + out ["cpp:array"] optional(3) SmallStructList p3); + + ["cpp:array"] optional(1) FixedStructSeq opFixedStructSeq(["cpp:array"] optional(2) FixedStructSeq p1, out ["cpp:array"] optional(3) FixedStructSeq p3); - ["cpp:range"] optional(1) VarStructSeq opVarStructSeq(["cpp:range"] optional(2) VarStructSeq p1, + ["cpp:array"] optional(1) FixedStructList opFixedStructList(["cpp:array"] optional(2) FixedStructList p1, + out ["cpp:array"] optional(3) FixedStructList p3); + + ["cpp:range"] optional(1) VarStructSeq opVarStructSeq(["cpp:range"] optional(2) VarStructSeq p1, out ["cpp:range"] optional(3) VarStructSeq p3); + optional(1) IntIntDict opIntIntDict(optional(2) IntIntDict p1, out optional(3) IntIntDict p3); + + optional(1) StringIntDict opStringIntDict(optional(2) StringIntDict p1, out optional(3) StringIntDict p3); + void opClassAndUnknownOptional(A p); }; diff --git a/cpp/test/Ice/optional/TestI.cpp b/cpp/test/Ice/optional/TestI.cpp index 22de9e2cb6e..826d0e9178c 100644 --- a/cpp/test/Ice/optional/TestI.cpp +++ b/cpp/test/Ice/optional/TestI.cpp @@ -44,6 +44,42 @@ InitialI::opOptionalException(const Optional<Int>& a, throw ex; } +void +InitialI::opDerivedException(const Optional<Int>& a, + const Optional<string>& b, + const Optional<OneOptionalPtr>& o, + const Ice::Current&) +{ + DerivedException ex; + ex.a = a; + ex.b = b; + ex.o = o; + ex.ss = b; + ex.o2 = o; + throw ex; +} + +void +InitialI::opRequiredException(const Optional<Int>& a, + const Optional<string>& b, + const Optional<OneOptionalPtr>& o, + const Ice::Current&) +{ + RequiredException ex; + ex.a = a; + ex.b = b; + ex.o = o; + if(b) + { + ex.ss = b.get(); + } + if(o) + { + ex.o2 = o.get(); + } + throw ex; +} + Optional<Ice::Byte> InitialI::opByte(const Optional<Ice::Byte>& p1, Optional<Ice::Byte>& p3, const Current&) { @@ -51,6 +87,27 @@ InitialI::opByte(const Optional<Ice::Byte>& p1, Optional<Ice::Byte>& p3, const C return p1; } +Optional<bool> +InitialI::opBool(const Optional<bool>& p1, Optional<bool>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<Short> +InitialI::opShort(const Optional<Short>& p1, Optional<Short>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<Int> +InitialI::opInt(const Optional<Int>& p1, Optional<Int>& p3, const Current&) +{ + p3 = p1; + return p1; +} + Optional<Long> InitialI::opLong(const Optional<Long>& p1, Optional<Long>& p3, const Current&) { @@ -58,6 +115,20 @@ InitialI::opLong(const Optional<Long>& p1, Optional<Long>& p3, const Current&) return p1; } +Optional<Float> +InitialI::opFloat(const Optional<Float>& p1, Optional<Float>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<Double> +InitialI::opDouble(const Optional<Double>& p1, Optional<Double>& p3, const Current&) +{ + p3 = p1; + return p1; +} + Optional<string> InitialI::opString(const Optional<string>& p1, Optional<string>& p3, const Current&) { @@ -65,6 +136,34 @@ InitialI::opString(const Optional<string>& p1, Optional<string>& p3, const Curre return p1; } +Optional<MyEnum> +InitialI::opMyEnum(const Optional<MyEnum>& p1, Optional<MyEnum>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<SmallStruct> +InitialI::opSmallStruct(const Optional<SmallStruct>& p1, Optional<SmallStruct>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<FixedStruct> +InitialI::opFixedStruct(const Optional<FixedStruct>& p1, Optional<FixedStruct>& p3, const Current&) +{ + p3 = p1; + return p1; +} + +Optional<VarStruct> +InitialI::opVarStruct(const Optional<VarStruct>& p1, Optional<VarStruct>& p3, const Current&) +{ + p3 = p1; + return p1; +} + Optional<OneOptionalPtr> InitialI::opOneOptional(const Optional<OneOptionalPtr>& p1, Optional<OneOptionalPtr>& p3, const Current&) { @@ -79,8 +178,8 @@ InitialI::opOneOptionalProxy(const Optional<OneOptionalPrx>& p1, Optional<OneOpt return p1; } -Optional<Ice::ByteSeq> -InitialI::opByteSeq(const Optional<pair<const Ice::Byte*, const Ice::Byte*> >& p1, Optional<Ice::ByteSeq>& p3, +Optional<Test::ByteSeq> +InitialI::opByteSeq(const Optional<pair<const Ice::Byte*, const Ice::Byte*> >& p1, Optional<Test::ByteSeq>& p3, const Current&) { if(p1) @@ -90,8 +189,19 @@ InitialI::opByteSeq(const Optional<pair<const Ice::Byte*, const Ice::Byte*> >& p return p3; } -Optional<Ice::ShortSeq> -InitialI::opShortSeq(const Optional<pair<const Short*, const Short*> >& p1, Optional<Ice::ShortSeq>& p3, const Current&) +Optional<Test::BoolSeq> +InitialI::opBoolSeq(const Optional<pair<const bool*, const bool*> >& p1, Optional<Test::BoolSeq>& p3, const Current&) +{ + if(p1) + { + p3 = Ice::BoolSeq(p1->first, p1->second); + } + return p3; +} + +Optional<Test::ShortSeq> +InitialI::opShortSeq(const Optional<pair<const Short*, const Short*> >& p1, Optional<Test::ShortSeq>& p3, + const Current&) { if(p1) { @@ -100,20 +210,51 @@ InitialI::opShortSeq(const Optional<pair<const Short*, const Short*> >& p1, Opti return p3; } -Optional<Ice::BoolSeq> -InitialI::opBoolSeq(const Optional<pair<const bool*, const bool*> >& p1, Optional<Ice::BoolSeq>& p3, const Current&) +Optional<Test::IntSeq> +InitialI::opIntSeq(const Optional<pair<const Int*, const Int*> >& p1, Optional<Test::IntSeq>& p3, const Current&) { if(p1) { - p3 = Ice::BoolSeq(p1->first, p1->second); + p3 = Test::IntSeq(p1->first, p1->second); + } + return p3; +} + +Optional<Test::LongSeq> +InitialI::opLongSeq(const Optional<pair<const Long*, const Long*> >& p1, Optional<Test::LongSeq>& p3, const Current&) +{ + if(p1) + { + p3 = Test::LongSeq(p1->first, p1->second); + } + return p3; +} + +Optional<Test::FloatSeq> +InitialI::opFloatSeq(const Optional<pair<const Float*, const Float*> >& p1, Optional<Test::FloatSeq>& p3, + const Current&) +{ + if(p1) + { + p3 = Test::FloatSeq(p1->first, p1->second); + } + return p3; +} + +Optional<Test::DoubleSeq> +InitialI::opDoubleSeq(const Optional<pair<const Double*, const Double*> >& p1, Optional<Test::DoubleSeq>& p3, + const Current&) +{ + if(p1) + { + p3 = Test::DoubleSeq(p1->first, p1->second); } return p3; } Optional<Ice::StringSeq> InitialI::opStringSeq(const Optional<pair<Ice::StringSeq::const_iterator, Ice::StringSeq::const_iterator> >& p1, - Optional<Ice::StringSeq>& p3, - const Current&) + Optional<Ice::StringSeq>& p3, const Current&) { if(p1) { @@ -122,10 +263,31 @@ InitialI::opStringSeq(const Optional<pair<Ice::StringSeq::const_iterator, Ice::S return p3; } +Optional<SmallStructSeq> +InitialI::opSmallStructSeq(const Optional<pair<const SmallStruct*, const SmallStruct*> >& p1, + Optional<SmallStructSeq>& p3, const Current&) +{ + if(p1) + { + p3 = SmallStructSeq(p1->first, p1->second); + } + return p3; +} + +Optional<SmallStructList> +InitialI::opSmallStructList(const Optional<pair<const SmallStruct*, const SmallStruct*> >& p1, + Optional<SmallStructList>& p3, const Current&) +{ + if(p1) + { + p3 = SmallStructList(p1->first, p1->second); + } + return p3; +} + Optional<FixedStructSeq> InitialI::opFixedStructSeq(const Optional<pair<const FixedStruct*, const FixedStruct*> >& p1, - Optional<FixedStructSeq>& p3, - const Current&) + Optional<FixedStructSeq>& p3, const Current&) { if(p1) { @@ -134,10 +296,20 @@ InitialI::opFixedStructSeq(const Optional<pair<const FixedStruct*, const FixedSt return p3; } +Optional<FixedStructList> +InitialI::opFixedStructList(const Optional<pair<const FixedStruct*, const FixedStruct*> >& p1, + Optional<FixedStructList>& p3, const Current&) +{ + if(p1) + { + p3 = FixedStructList(p1->first, p1->second); + } + return p3; +} + Optional<VarStructSeq> InitialI::opVarStructSeq(const Optional<pair<VarStructSeq::const_iterator, VarStructSeq::const_iterator> >& p1, - Optional<VarStructSeq>& p3, - const Current&) + Optional<VarStructSeq>& p3, const Current&) { if(p1) { @@ -146,6 +318,26 @@ InitialI::opVarStructSeq(const Optional<pair<VarStructSeq::const_iterator, VarSt return p3; } +Optional<IntIntDict> +InitialI::opIntIntDict(const Optional<IntIntDict>& p1, Optional<IntIntDict>& p3, const Current&) +{ + if(p1) + { + p3 = p1; + } + return p3; +} + +Optional<StringIntDict> +InitialI::opStringIntDict(const Optional<StringIntDict>& p1, Optional<StringIntDict>& p3, const Current&) +{ + if(p1) + { + p3 = p1; + } + return p3; +} + void InitialI::opClassAndUnknownOptional(const APtr& a, const Ice::Current&) { diff --git a/cpp/test/Ice/optional/TestI.h b/cpp/test/Ice/optional/TestI.h index e6d5d07c60b..2a0e769bc61 100644 --- a/cpp/test/Ice/optional/TestI.h +++ b/cpp/test/Ice/optional/TestI.h @@ -22,60 +22,147 @@ public: virtual void shutdown(const Ice::Current&); virtual Ice::ObjectPtr pingPong(const Ice::ObjectPtr&, const Ice::Current&); - virtual void opOptionalException(const IceUtil::Optional< ::Ice::Int>&, + virtual void opOptionalException(const IceUtil::Optional< ::Ice::Int>&, const IceUtil::Optional< ::std::string>&, const IceUtil::Optional<Test::OneOptionalPtr>&, const Ice::Current&); - virtual IceUtil::Optional< ::Ice::Byte> opByte(const IceUtil::Optional< ::Ice::Byte>&, - IceUtil::Optional< ::Ice::Byte>&, + virtual void opDerivedException(const IceUtil::Optional< ::Ice::Int>&, + const IceUtil::Optional< ::std::string>&, + const IceUtil::Optional<Test::OneOptionalPtr>&, + const Ice::Current&); + + virtual void opRequiredException(const IceUtil::Optional< ::Ice::Int>&, + const IceUtil::Optional< ::std::string>&, + const IceUtil::Optional<Test::OneOptionalPtr>&, + const Ice::Current&); + + virtual IceUtil::Optional< ::Ice::Byte> opByte(const IceUtil::Optional< ::Ice::Byte>&, + IceUtil::Optional< ::Ice::Byte>&, const ::Ice::Current&); - - virtual IceUtil::Optional< ::Ice::Long> opLong(const IceUtil::Optional< ::Ice::Long>&, - IceUtil::Optional< ::Ice::Long>&, + + virtual IceUtil::Optional< bool> opBool(const IceUtil::Optional< bool>&, IceUtil::Optional< bool>&, + const ::Ice::Current&); + + virtual IceUtil::Optional< ::Ice::Short> opShort(const IceUtil::Optional< ::Ice::Short>&, + IceUtil::Optional< ::Ice::Short>&, + const ::Ice::Current&); + + virtual IceUtil::Optional< ::Ice::Int> opInt(const IceUtil::Optional< ::Ice::Int>&, + IceUtil::Optional< ::Ice::Int>&, + const ::Ice::Current&); + + virtual IceUtil::Optional< ::Ice::Long> opLong(const IceUtil::Optional< ::Ice::Long>&, + IceUtil::Optional< ::Ice::Long>&, const ::Ice::Current&); - virtual IceUtil::Optional< ::std::string> opString(const IceUtil::Optional< ::std::string>&, - IceUtil::Optional< ::std::string>&, + virtual IceUtil::Optional< ::Ice::Float> opFloat(const IceUtil::Optional< ::Ice::Float>&, + IceUtil::Optional< ::Ice::Float>&, + const ::Ice::Current&); + + virtual IceUtil::Optional< ::Ice::Double> opDouble(const IceUtil::Optional< ::Ice::Double>&, + IceUtil::Optional< ::Ice::Double>&, const ::Ice::Current&); - virtual IceUtil::Optional<Test::OneOptionalPtr> opOneOptional(const IceUtil::Optional< Test::OneOptionalPtr>&, - IceUtil::Optional< Test::OneOptionalPtr>&, + virtual IceUtil::Optional< ::std::string> opString(const IceUtil::Optional< ::std::string>&, + IceUtil::Optional< ::std::string>&, + const ::Ice::Current&); + + virtual IceUtil::Optional< Test::MyEnum> opMyEnum(const IceUtil::Optional<Test::MyEnum>&, + IceUtil::Optional<Test::MyEnum>&, + const ::Ice::Current&); + + virtual IceUtil::Optional<Test::SmallStruct> opSmallStruct(const IceUtil::Optional<Test::SmallStruct>&, + IceUtil::Optional<Test::SmallStruct>&, + const ::Ice::Current&); + + virtual IceUtil::Optional<Test::FixedStruct> opFixedStruct(const IceUtil::Optional<Test::FixedStruct>&, + IceUtil::Optional<Test::FixedStruct>&, + const ::Ice::Current&); + + virtual IceUtil::Optional<Test::VarStruct> opVarStruct(const IceUtil::Optional<Test::VarStruct>&, + IceUtil::Optional<Test::VarStruct>&, + const ::Ice::Current&); + + virtual IceUtil::Optional<Test::OneOptionalPtr> opOneOptional(const IceUtil::Optional< Test::OneOptionalPtr>&, + IceUtil::Optional< Test::OneOptionalPtr>&, const ::Ice::Current&); - - virtual IceUtil::Optional<Test::OneOptionalPrx> opOneOptionalProxy(const IceUtil::Optional< Test::OneOptionalPrx>&, - IceUtil::Optional< Test::OneOptionalPrx>&, + + virtual IceUtil::Optional<Test::OneOptionalPrx> opOneOptionalProxy(const IceUtil::Optional< Test::OneOptionalPrx>&, + IceUtil::Optional< Test::OneOptionalPrx>&, const ::Ice::Current&); - + virtual IceUtil::Optional< ::Test::ByteSeq> opByteSeq( - const IceUtil::Optional< ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*> >&, - IceUtil::Optional< ::Test::ByteSeq>&, + const IceUtil::Optional< ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*> >&, + IceUtil::Optional< ::Test::ByteSeq>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::BoolSeq> opBoolSeq( + const IceUtil::Optional< ::std::pair<const bool*, const bool*> >&, + IceUtil::Optional< ::Test::BoolSeq>&, const ::Ice::Current& = ::Ice::Current()); virtual IceUtil::Optional< ::Test::ShortSeq> opShortSeq( - const IceUtil::Optional< ::std::pair<const ::Ice::Short*, const ::Ice::Short*> >&, - IceUtil::Optional< ::Test::ShortSeq>&, + const IceUtil::Optional< ::std::pair<const ::Ice::Short*, const ::Ice::Short*> >&, + IceUtil::Optional< ::Test::ShortSeq>&, const ::Ice::Current& = ::Ice::Current()); - virtual IceUtil::Optional< ::Test::BoolSeq> opBoolSeq( - const IceUtil::Optional< ::std::pair<const bool*, const bool*> >&, - IceUtil::Optional< ::Test::BoolSeq>&, + virtual IceUtil::Optional< ::Test::IntSeq> opIntSeq( + const IceUtil::Optional< ::std::pair<const ::Ice::Int*, const ::Ice::Int*> >&, + IceUtil::Optional< ::Test::IntSeq>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::LongSeq> opLongSeq( + const IceUtil::Optional< ::std::pair<const ::Ice::Long*, const ::Ice::Long*> >&, + IceUtil::Optional< ::Test::LongSeq>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::FloatSeq> opFloatSeq( + const IceUtil::Optional< ::std::pair<const ::Ice::Float*, const ::Ice::Float*> >&, + IceUtil::Optional< ::Test::FloatSeq>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::DoubleSeq> opDoubleSeq( + const IceUtil::Optional< ::std::pair<const ::Ice::Double*, const ::Ice::Double*> >&, + IceUtil::Optional< ::Test::DoubleSeq>&, const ::Ice::Current& = ::Ice::Current()); virtual IceUtil::Optional< ::Test::StringSeq> opStringSeq( - const IceUtil::Optional< ::std::pair< ::Test::StringSeq::const_iterator, + const IceUtil::Optional< ::std::pair< ::Test::StringSeq::const_iterator, ::Test::StringSeq::const_iterator> >&, - IceUtil::Optional< ::Test::StringSeq>&, + IceUtil::Optional< ::Test::StringSeq>&, const ::Ice::Current& = ::Ice::Current()); + virtual IceUtil::Optional< ::Test::SmallStructSeq> opSmallStructSeq( + const IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >&, + IceUtil::Optional< ::Test::SmallStructSeq>&, const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::SmallStructList> opSmallStructList( + const IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >&, + IceUtil::Optional< ::Test::SmallStructList>&, const ::Ice::Current& = ::Ice::Current()); + virtual IceUtil::Optional< ::Test::FixedStructSeq> opFixedStructSeq( const IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >&, IceUtil::Optional< ::Test::FixedStructSeq>&, const ::Ice::Current& = ::Ice::Current()); - + + virtual IceUtil::Optional< ::Test::FixedStructList> opFixedStructList( + const IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >&, + IceUtil::Optional< ::Test::FixedStructList>&, const ::Ice::Current& = ::Ice::Current()); + virtual IceUtil::Optional< ::Test::VarStructSeq> opVarStructSeq( - const IceUtil::Optional< ::std::pair< ::Test::VarStructSeq::const_iterator, + const IceUtil::Optional< ::std::pair< ::Test::VarStructSeq::const_iterator, ::Test::VarStructSeq::const_iterator> >&, - IceUtil::Optional< ::Test::VarStructSeq>&, + IceUtil::Optional< ::Test::VarStructSeq>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::IntIntDict> opIntIntDict( + const IceUtil::Optional< ::Test::IntIntDict>&, + IceUtil::Optional< ::Test::IntIntDict>&, + const ::Ice::Current& = ::Ice::Current()); + + virtual IceUtil::Optional< ::Test::StringIntDict> opStringIntDict( + const IceUtil::Optional< ::Test::StringIntDict>&, + IceUtil::Optional< ::Test::StringIntDict>&, const ::Ice::Current& = ::Ice::Current()); virtual void opClassAndUnknownOptional(const Test::APtr&, const Ice::Current&); |