//===--- LazyCollection.swift ---------------------------------*- swift -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// %for traversal in [ 'Forward', 'Bidirectional', 'RandomAccess' ]: % whereClause = 'where S.Index : %sIndexType' % traversal % Self = 'Lazy%sCollection' % traversal /// Augments `S` with lazy versions of various collection algorithms. public struct ${Self} : CollectionType { public init(_ base: S) { self._base = base } public func generate() -> S.Generator { return self._base.generate() } public var startIndex: S.Index { return _base.startIndex } public var endIndex: S.Index { return _base.endIndex } /// True if and only if the collection is empty public var isEmpty: Bool { return startIndex == endIndex } /// The first element, or `nil` if `self` is empty public var first: S.Generator.Element? { return Swift.first(self) } % if traversal != 'Forward': /// The last element, or `nil` if `self` is empty public var last: S.Generator.Element? { return Swift.last(self) } % end public subscript(i: S.Index) -> S.Generator.Element { return _base[i] } /// an Array, created on-demand, containing the elements of this /// lazy CollectionType. public var array: [S.Generator.Element] { return Array(_base) } var _base: S } /// Augment `s` with lazy methods such as `map`, `filter`, etc. public func lazy(s: S) -> ${Self} { return ${Self}(s) } %end // ${'Local Variables'}: // eval: (read-only-mode 1) // End: