[ 
https://issues.apache.org/jira/browse/THRIFT-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15482947#comment-15482947
 ] 

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_r78312512
  
    --- Diff: lib/swift/Sources/TMap.swift ---
    @@ -0,0 +1,182 @@
    +/*
    + * 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.
    + */
    +
    +public struct TMap<Key : TSerializable & Hashable, Value : TSerializable>: 
Collection, ExpressibleByDictionaryLiteral, Hashable, TSerializable {
    +  typealias Storage = Dictionary<Key, Value>
    +  public typealias Element = Storage.Element
    +  public typealias Index = Storage.Index
    +  public typealias IndexDistance = Storage.IndexDistance
    +  public typealias Indices = Storage.Indices
    +  public typealias SubSequence = Storage.SubSequence
    +  internal var storage = Storage()
    +  
    +  /// Mark: Be Like Dictionary
    +  
    +  public func indexForKey(_ key: Key) -> Index? {
    +    return storage.index(forKey: key)
    +  }
    +  
    +  public mutating func updateValue(_ value: Value, forKey key: Key) -> 
Value? {
    +    return updateValue(value, forKey: key)
    +  }
    +  
    +  public mutating func removeAtIndex(_ index: DictionaryIndex<Key, Value>) 
-> (Key, Value) {
    +    return removeAtIndex(index)
    +  }
    +  
    +  public mutating func removeValueForKey(_ key: Key) -> Value? {
    +    return storage.removeValue(forKey: key)
    +  }
    +  
    +  public init(minimumCapacity: Int) {
    +    storage = Storage(minimumCapacity: minimumCapacity)
    +  }
    +  
    +  public subscript (key: Key) -> Value? {
    +    get {
    +      return storage[key]
    +    }
    +    set {
    +      storage[key] = newValue
    +    }
    +  }
    +  
    +  /// Mark: Collection
    +  
    +  public var indices: Indices {
    +    return storage.indices
    +  }
    +  
    +  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: Index) -> Element {
    +    return storage[position]
    +  }
    +  
    +  /// 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 Index) {
    +    storage.formIndex(after: &i)
    +  }
    +  
    +  public subscript(bounds: Range<Index>) -> SubSequence {
    +    return storage[bounds]
    +  }
    +  
    +  /// Mark: DictionaryLiteralConvertible
    +  
    +  public init(dictionaryLiteral elements: (Key, Value)...) {
    +    storage = Storage()
    +    for (key, value) in elements {
    +      storage[key] = value
    +    }
    +  }
    +
    +  /// Mark: Hashable
    +  
    +  public var hashValue: Int {
    +    let prime = 31
    +    var result = 1
    +    for (key, value) in storage {
    +      result = prime * result + key.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