diff options
Diffstat (limited to 'swift/src')
-rw-r--r-- | swift/src/Ice/CommunicatorI.swift | 16 | ||||
-rw-r--r-- | swift/src/Ice/InputStream.swift | 21 | ||||
-rw-r--r-- | swift/src/Ice/OutputStream.swift | 16 | ||||
-rw-r--r-- | swift/src/IceObjc/Communicator.mm | 14 |
4 files changed, 52 insertions, 15 deletions
diff --git a/swift/src/Ice/CommunicatorI.swift b/swift/src/Ice/CommunicatorI.swift index 0283be06291..bb06b80c7c8 100644 --- a/swift/src/Ice/CommunicatorI.swift +++ b/swift/src/Ice/CommunicatorI.swift @@ -15,6 +15,7 @@ class CommunicatorI: LocalObject<ICECommunicator>, Communicator { let initData: InitializationData let valueFactoryManager: ValueFactoryManager = ValueFactoryManagerI() + let defaultsAndOverrides: DefaultsAndOverrides // required init(initData: InitializationData) { // if let enc = initData.properties?.getProperty(key: "Ice.Default.EncodingVersion"), !enc.isEmpty { @@ -33,6 +34,7 @@ class CommunicatorI: LocalObject<ICECommunicator>, Communicator { init(handle: ICECommunicator, initData: InitializationData) { self.initData = initData + self.defaultsAndOverrides = DefaultsAndOverrides(handle: handle) super.init(handle: handle) } @@ -190,3 +192,17 @@ class CommunicatorI: LocalObject<ICECommunicator>, Communicator { preconditionFailure("Not yet implemented") } } + +public class DefaultsAndOverrides { + + public init(handle: ICECommunicator) { + + var defaultEncoding = EncodingVersion() + handle.getDefaultEncoding(major: &defaultEncoding.major, minor: &defaultEncoding.minor) + self.defaultEncoding = defaultEncoding + self.defaultFormat = FormatType(rawValue: handle.getDefaultFormat())! + } + + public let defaultEncoding: EncodingVersion + public let defaultFormat: FormatType +} diff --git a/swift/src/Ice/InputStream.swift b/swift/src/Ice/InputStream.swift index 555081f41ed..fc6f64188d2 100644 --- a/swift/src/Ice/InputStream.swift +++ b/swift/src/Ice/InputStream.swift @@ -27,9 +27,18 @@ public class InputStream { private var minSeqSize: Int32 = 0 public var sliceValues: Bool = true - public init(communicator: Communicator, - encoding: EncodingVersion = currentEncoding, - bytes: [UInt8]) { + public convenience init(communicator: Communicator) { + self.init(communicator: communicator, bytes: []) + } + + public convenience init(communicator: Communicator, bytes: [UInt8]) { + let encoding = (communicator as! CommunicatorI).defaultsAndOverrides.defaultEncoding + self.init(communicator: communicator, encoding: encoding, bytes: bytes) + } + + public required init(communicator: Communicator, + encoding: EncodingVersion, + bytes: [UInt8]) { self.communicator = communicator self.encoding = encoding self.bytes = bytes @@ -39,11 +48,9 @@ public class InputStream { traceSlicing = communicator.getProperties().getPropertyAsIntWithDefault(key: "Ice.Trace.Slicing", value: 0) > 0 } - init(communicator: Communicator, - encoding: EncodingVersion = currentEncoding, - inputStream handle: ICEInputStream) { + init(communicator: Communicator, inputStream handle: ICEInputStream) { self.communicator = communicator - self.encoding = encoding + self.encoding = currentEncoding // TODO should we get encoding from ICEInputStream? self.handle = handle buf = Buffer(start: handle.data(), count: handle.size()) traceSlicing = communicator.getProperties().getPropertyAsIntWithDefault(key: "Ice.Trace.Slicing", value: 0) > 0 diff --git a/swift/src/Ice/OutputStream.swift b/swift/src/Ice/OutputStream.swift index 8dcfd0d9c58..e49901441e0 100644 --- a/swift/src/Ice/OutputStream.swift +++ b/swift/src/Ice/OutputStream.swift @@ -19,17 +19,17 @@ public class OutputStream { private var encapsStack: Encaps! private var encapsCache: Encaps? - public init(communicator: Communicator, encoding: EncodingVersion = currentEncoding) { + public convenience init(communicator: Communicator) { + let encoding = (communicator as! CommunicatorI).defaultsAndOverrides.defaultEncoding + self.init(communicator: communicator, encoding: encoding) + } + + public init(communicator: Communicator, encoding: EncodingVersion) { self.communicator = communicator self.encoding = encoding self.encoding_1_0 = (encoding.major == 1 && encoding.minor == 0) - buf = Buffer() - - if communicator.getProperties().getPropertyAsIntWithDefault(key: "Ice.Default.SlicedFormat", value: 0) > 0 { - format = FormatType.SlicedFormat - } else { - format = FormatType.CompactFormat - } + self.buf = Buffer() + self.format = (communicator as! CommunicatorI).defaultsAndOverrides.defaultFormat } public func startEncapsulation() { diff --git a/swift/src/IceObjc/Communicator.mm b/swift/src/IceObjc/Communicator.mm index d8851091e51..c3f80bead58 100644 --- a/swift/src/IceObjc/Communicator.mm +++ b/swift/src/IceObjc/Communicator.mm @@ -15,6 +15,9 @@ #include "IceObjcUtil.h" +#include <Ice/Instance.h> +#include <Ice/DefaultsAndOverrides.h> + @implementation ICECommunicator -(instancetype) initWithCppCommunicator:(std::shared_ptr<Ice::Communicator>)communicator @@ -207,4 +210,15 @@ return [[ICEProperties alloc] initWithCppProperties:props]; } +-(void) getDefaultEncoding:(nonnull uint8_t*)major minor:(nonnull uint8_t*)minor +{ + auto defaultEncoding = IceInternal::getInstance(_communicator)->defaultsAndOverrides()->defaultEncoding; + *major = defaultEncoding.major; + *minor = defaultEncoding.minor; +} + +-(uint8_t) getDefaultFormat +{ + return static_cast<uint8_t>(IceInternal::getInstance(_communicator)->defaultsAndOverrides()->defaultFormat); +} @end |