Files
swift-mirror/stdlib/core/LazyCollection.swift.gyb
Dave Abrahams 1a6c80a93d [stdlib] .first and .last are var:T?, not func->T
The global first() and last() algorithms return T?, nil when empty

All .first() and .last() methods became T? vars that are nil when the
Collection is empty

Swift SVN r20326
2014-07-22 19:30:42 +00:00

83 lines
2.0 KiB
Swift

//===--- 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}<S: CollectionType ${whereClause}> : 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: CollectionType ${whereClause}>(s: S) -> ${Self}<S> {
return ${Self}(s)
}
%end
// ${'Local Variables'}:
// eval: (read-only-mode 1)
// End: