1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkTPin_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkTPin_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include <algorithm> 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker /** @return x pinned (clamped) between lo and hi, inclusively. 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker Unlike std::clamp(), SkTPin() always returns a value between lo and hi. 16*c8dee2aaSAndroid Build Coastguard Worker If x is NaN, SkTPin() returns lo but std::clamp() returns NaN. 17*c8dee2aaSAndroid Build Coastguard Worker */ 18*c8dee2aaSAndroid Build Coastguard Worker template <typename T> SkTPin(const T & x,const T & lo,const T & hi)19*c8dee2aaSAndroid Build Coastguard Workerstatic constexpr const T& SkTPin(const T& x, const T& lo, const T& hi) { 20*c8dee2aaSAndroid Build Coastguard Worker return std::max(lo, std::min(x, hi)); 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker #endif 24