[
https://issues.apache.org/jira/browse/THRIFT-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15482948#comment-15482948
]
ASF GitHub Bot commented on THRIFT-3773:
----------------------------------------
Github user fumoboy007 commented on a diff in the pull request:
https://github.com/apache/thrift/pull/1084#discussion_r78312532
--- Diff: lib/swift/Sources/TSet.swift ---
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import Foundation
+
+public struct TSet<Element : TSerializable & Hashable> : SetAlgebra,
Hashable, Collection, ExpressibleByArrayLiteral, TSerializable {
+ /// Typealias for Storage type
+ typealias Storage = Set<Element>
+
+
+ /// Internal Storage used for TSet (Set\<Element\>)
+ internal var storage : Storage
+
+
+ /// Mark: Collection
+
+ public typealias Indices = Storage.Indices
+ public typealias Index = Storage.Index
+ public typealias IndexDistance = Storage.IndexDistance
+ public typealias SubSequence = Storage.SubSequence
+
+
+ public var indices: Indices { return storage.indices }
+
+ // Must implement isEmpty even though both SetAlgebra and Collection
provide it due to their conflciting default implementations
+ public var isEmpty: Bool { return storage.isEmpty }
+
+ public func distance(from start: Index, to end: Index) -> IndexDistance {
+ return storage.distance(from: start, to: end)
+ }
+
+ public func index(_ i: Index, offsetBy n: IndexDistance) -> Index {
+ return storage.index(i, offsetBy: n)
+ }
+
+ public func index(_ i: Index, offsetBy n: IndexDistance, limitedBy
limit: Index) -> Index? {
+ return storage.index(i, offsetBy: n, limitedBy: limit)
+ }
+
+ public subscript (position: Storage.Index) -> Element? {
+ return storage[position]
+ }
+
+ /// Mark: SetAlgebra
+ internal init(storage: Set<Element>) {
+ self.storage = storage
+ }
+
+ public func contains(_ member: Element) -> Bool {
+ return storage.contains(member)
+ }
+
+ public mutating func insert(_ newMember: Element) -> (inserted: Bool,
memberAfterInsert: Element) {
+ return storage.insert(newMember)
+ }
+
+ public mutating func remove(_ member: Element) -> Element? {
+ return storage.remove(member)
+ }
+
+ public func union(_ other: TSet<Element>) -> TSet {
+ return TSet(storage: storage.union(other.storage))
+ }
+
+ public mutating func formIntersection(_ other: TSet<Element>) {
+ return storage.formIntersection(other.storage)
+ }
+
+ public mutating func formSymmetricDifference(_ other: TSet<Element>) {
+ return storage.formSymmetricDifference(other.storage)
+ }
+
+ public mutating func formUnion(_ other: TSet<Element>) {
+ return storage.formUnion(other.storage)
+ }
+
+ public func intersection(_ other: TSet<Element>) -> TSet {
+ return TSet(storage: storage.intersection(other.storage))
+ }
+
+ public func symmetricDifference(_ other: TSet<Element>) -> TSet {
+ return TSet(storage: storage.symmetricDifference(other.storage))
+ }
+
+ public mutating func update(with newMember: Element) -> Element? {
+ return storage.update(with: newMember)
+ }
+
+ /// Mark: IndexableBase
+
+ public var startIndex: Index { return storage.startIndex }
+ public var endIndex: Index { return storage.endIndex }
+ public func index(after i: Index) -> Index {
+ return storage.index(after: i)
+ }
+
+ public func formIndex(after i: inout Storage.Index) {
+ storage.formIndex(after: &i)
+ }
+
+ public subscript(bounds: Range<Index>) -> SubSequence {
+ return storage[bounds]
+ }
+
+
+ /// Mark: Hashable
+ public var hashValue : Int {
+ let prime = 31
+ var result = 1
+ for element in storage {
+ result = prime * result + element.hashValue
--- End diff --
`&*`, `&+`?
> Swift Library
> -------------
>
> Key: THRIFT-3773
> URL: https://issues.apache.org/jira/browse/THRIFT-3773
> Project: Thrift
> Issue Type: New Feature
> Components: Swift - Library
> Reporter: Thomas Bartelmess
>
> We already have the option to generate Swift code in the Cocoa compiler,
> however large parts of the (Objective-C) Cocoa Library still depend on Cocoa
> and Objective-C.
> It would be good to have a native Swift library that doesn't depend on the
> Cocoa libraries.
> Design goals:
> - Fully compatible with the code that is currently generated by the Cocoa
> compiler (both Objective-C and Swift).
> - Ability to run on Linux
> - Pure Swift, no Objective-C code.
> - No dependencies on closed source apple libraries
> - Keep the same interface, so that the library is compatible with the code
> the current cocoa compiler generates
> - Better server support that the current Objective-C library.
> - Follow the new Swift packaging format to be compatible with the Swift
> Package manager
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)