summaryrefslogtreecommitdiff
path: root/swift/src
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2019-03-15 12:12:03 +0100
committerJose <jose@zeroc.com>2019-03-15 12:12:03 +0100
commit786d12dd7601db8428ed9ae5d368e6f309d39f05 (patch)
tree650bc9cc1befee2a99736ca5cf7a3cd43017d8e2 /swift/src
parentActually fix _invoke (diff)
downloadice-786d12dd7601db8428ed9ae5d368e6f309d39f05.tar.bz2
ice-786d12dd7601db8428ed9ae5d368e6f309d39f05.tar.xz
ice-786d12dd7601db8428ed9ae5d368e6f309d39f05.zip
Fixes for OutputStream and InputStream initialization
Diffstat (limited to 'swift/src')
-rw-r--r--swift/src/Ice/CommunicatorI.swift16
-rw-r--r--swift/src/Ice/InputStream.swift21
-rw-r--r--swift/src/Ice/OutputStream.swift16
-rw-r--r--swift/src/IceObjc/Communicator.mm14
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