Skip to content

Commit

Permalink
Add public scope
Browse files Browse the repository at this point in the history
  • Loading branch information
sendyhalim committed Jun 16, 2017
1 parent 716e075 commit 4069fa7
Showing 1 changed file with 21 additions and 21 deletions.
42 changes: 21 additions & 21 deletions Sources/OrderedSet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,33 @@

import Foundation

struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
public struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
fileprivate var indexByElement: [T: Int] = [:]
fileprivate var elements: Array<T> = []

var count: Int {
public var count: Int {
return elements.count
}

init(elements: [T]) {
public init(elements: [T]) {
append(elements: elements)
}

init(arrayLiteral elements: T...) {
public init(arrayLiteral elements: T...) {
append(elements: elements)
}

private func validIndex(index: Int) -> Bool {
return index > -1 && index < elements.count
}

mutating func append(elements: [T]) {
public mutating func append(elements: [T]) {
for element in elements {
append(element: element)
}
}

mutating func append(element: T) {
public mutating func append(element: T) {
if indexByElement[element] != nil {
return
}
Expand All @@ -43,7 +43,7 @@ struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
elements.append(element)
}

mutating func swap(fromIndex: Int, toIndex: Int) {
public mutating func swap(fromIndex: Int, toIndex: Int) {
guard validIndex(index: fromIndex) && validIndex(index: toIndex) else {
return
}
Expand All @@ -59,7 +59,7 @@ struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
}

@discardableResult
mutating func remove(element: T) -> T? {
public mutating func remove(element: T) -> T? {
guard let index = indexByElement[element] else {
return .none
}
Expand All @@ -68,7 +68,7 @@ struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
}

@discardableResult
mutating func remove(index: Int) -> T? {
public mutating func remove(index: Int) -> T? {
guard validIndex(index: index) else {
return .none
}
Expand All @@ -78,7 +78,7 @@ struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
return remove(element: element, index: index)
}

mutating func insert(element: T, atIndex: Int) {
public mutating func insert(element: T, atIndex: Int) {
if atIndex == 0 {
elements = [element] + elements
} else if atIndex == count {
Expand All @@ -103,13 +103,13 @@ struct OrderedSet<T: Hashable>: ExpressibleByArrayLiteral {
return elements.remove(at: index)
}

func has(element: T) -> Bool {
public func has(element: T) -> Bool {
return indexByElement[element] != nil
}
}

extension OrderedSet: CustomStringConvertible {
var description: String {
public var description: String {
return elements.reduce("OrderedSet \(count) objects: ") {
"\($0), \($1)"
}
Expand All @@ -126,17 +126,17 @@ extension OrderedSet: MutableCollection {
return i + 1
}

typealias Index = Int
public typealias Index = Int

var startIndex: Int {
public var startIndex: Int {
return 0
}

var endIndex: Int {
public var endIndex: Int {
return elements.count
}

subscript(index: Index) -> T {
public subscript(index: Index) -> T {
get {
return elements[index]
}
Expand All @@ -151,23 +151,23 @@ extension OrderedSet: MutableCollection {
}

extension OrderedSet: Sequence {
typealias Iterator = OrderedSetGenerator<T>
public typealias Iterator = OrderedSetGenerator<T>

func makeIterator() -> Iterator {
public func makeIterator() -> Iterator {
return OrderedSetGenerator(set: self)
}
}

struct OrderedSetGenerator<T: Hashable>: IteratorProtocol {
typealias Element = T
public struct OrderedSetGenerator<T: Hashable>: IteratorProtocol {
public typealias Element = T

var generator: IndexingIterator<Array<T>>

init(set: OrderedSet<T>) {
generator = set.elements.makeIterator()
}

mutating func next() -> T? {
public mutating func next() -> T? {
return generator.next()
}
}

0 comments on commit 4069fa7

Please sign in to comment.