1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#if FOUNDATION_FRAMEWORK
@available(FoundationPredicate 0.1, *)
extension PredicateExpressions {
public struct StringCaseInsensitiveCompare<
Root : PredicateExpression,
Other : PredicateExpression
> : PredicateExpression where
Root.Output : StringProtocol,
Other.Output : StringProtocol
{
public typealias Output = ComparisonResult
public let root: Root
public let other: Other
public init(root: Root, other: Other) {
self.root = root
self.other = other
}
public func evaluate(_ bindings: PredicateBindings) throws -> Output {
try root.evaluate(bindings).caseInsensitiveCompare(try other.evaluate(bindings))
}
}
public static func build_caseInsensitiveCompare<Root, Other>(_ root: Root, _ other: Other) -> StringCaseInsensitiveCompare<Root, Other> {
StringCaseInsensitiveCompare(root: root, other: other)
}
}
@available(FoundationPredicate 0.3, *)
extension PredicateExpressions.StringCaseInsensitiveCompare : CustomStringConvertible {
public var description: String {
"StringCaseInsensitiveCompare(root: \(root), other: \(other))"
}
}
@available(FoundationPredicate 0.1, *)
extension PredicateExpressions.StringCaseInsensitiveCompare : StandardPredicateExpression where Root : StandardPredicateExpression, Other : StandardPredicateExpression {}
@available(FoundationPredicate 0.1, *)
extension PredicateExpressions.StringCaseInsensitiveCompare : Codable where Root : Codable, Other : Codable {
public func encode(to encoder: Encoder) throws {
var container = encoder.unkeyedContainer()
try container.encode(root)
try container.encode(other)
}
public init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
root = try container.decode(Root.self)
other = try container.decode(Other.self)
}
}
@available(FoundationPredicate 0.1, *)
extension PredicateExpressions.StringCaseInsensitiveCompare : Sendable where Root : Sendable, Other : Sendable {}
#endif
|