2021-10-20 10:50:38 -07:00
|
|
|
//
|
|
|
|
// Clamped.swift
|
|
|
|
// secant-testnet
|
|
|
|
//
|
|
|
|
// Created by Francisco Gindre on 10/20/21.
|
|
|
|
//
|
|
|
|
// credits: https://iteo.medium.com/swift-property-wrappers-how-to-use-them-right-77095817d1b
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
/**
|
|
|
|
Limits a value to an enclosing range
|
|
|
|
*/
|
|
|
|
@propertyWrapper
|
2021-10-21 08:40:35 -07:00
|
|
|
struct Clamped<Value: Comparable> {
|
2021-10-20 10:50:38 -07:00
|
|
|
var value: Value
|
|
|
|
let range: ClosedRange<Value>
|
|
|
|
var wrappedValue: Value {
|
2022-02-17 22:06:32 -08:00
|
|
|
get {
|
|
|
|
min(
|
|
|
|
max(range.lowerBound, value),
|
2021-10-21 08:40:35 -07:00
|
|
|
range.upperBound
|
2021-10-20 10:50:38 -07:00
|
|
|
)
|
|
|
|
}
|
2022-02-17 22:06:32 -08:00
|
|
|
set { value = newValue }
|
2021-10-20 10:50:38 -07:00
|
|
|
}
|
2021-10-21 08:40:35 -07:00
|
|
|
|
|
|
|
init(wrappedValue: Value, _ range: ClosedRange<Value>) {
|
|
|
|
self.value = wrappedValue
|
|
|
|
self.range = range
|
|
|
|
}
|
2021-10-20 10:50:38 -07:00
|
|
|
}
|