[ 
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)

Reply via email to