xref: /aosp_15_r20/external/libchrome/ui/gfx/range/range_f.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/range/range_f.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <stddef.h>
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker #include <algorithm>
10*635a8641SAndroid Build Coastguard Worker #include <cmath>
11*635a8641SAndroid Build Coastguard Worker 
12*635a8641SAndroid Build Coastguard Worker #include "base/format_macros.h"
13*635a8641SAndroid Build Coastguard Worker #include "base/strings/stringprintf.h"
14*635a8641SAndroid Build Coastguard Worker 
15*635a8641SAndroid Build Coastguard Worker namespace gfx {
16*635a8641SAndroid Build Coastguard Worker 
Intersect(const RangeF & range) const17*635a8641SAndroid Build Coastguard Worker RangeF RangeF::Intersect(const RangeF& range) const {
18*635a8641SAndroid Build Coastguard Worker   float min = std::max(GetMin(), range.GetMin());
19*635a8641SAndroid Build Coastguard Worker   float max = std::min(GetMax(), range.GetMax());
20*635a8641SAndroid Build Coastguard Worker 
21*635a8641SAndroid Build Coastguard Worker   if (min >= max)  // No intersection.
22*635a8641SAndroid Build Coastguard Worker     return InvalidRange();
23*635a8641SAndroid Build Coastguard Worker 
24*635a8641SAndroid Build Coastguard Worker   return RangeF(min, max);
25*635a8641SAndroid Build Coastguard Worker }
26*635a8641SAndroid Build Coastguard Worker 
Intersect(const Range & range) const27*635a8641SAndroid Build Coastguard Worker RangeF RangeF::Intersect(const Range& range) const {
28*635a8641SAndroid Build Coastguard Worker   RangeF range_f(range.start(), range.end());
29*635a8641SAndroid Build Coastguard Worker   return Intersect(range_f);
30*635a8641SAndroid Build Coastguard Worker }
31*635a8641SAndroid Build Coastguard Worker 
Floor() const32*635a8641SAndroid Build Coastguard Worker Range RangeF::Floor() const {
33*635a8641SAndroid Build Coastguard Worker   uint32_t start = start_ > 0 ? static_cast<uint32_t>(std::floor(start_)) : 0;
34*635a8641SAndroid Build Coastguard Worker   uint32_t end = end_ > 0 ? static_cast<uint32_t>(std::floor(end_)) : 0;
35*635a8641SAndroid Build Coastguard Worker   return Range(start, end);
36*635a8641SAndroid Build Coastguard Worker }
37*635a8641SAndroid Build Coastguard Worker 
Ceil() const38*635a8641SAndroid Build Coastguard Worker Range RangeF::Ceil() const {
39*635a8641SAndroid Build Coastguard Worker   uint32_t start = start_ > 0 ? static_cast<uint32_t>(std::ceil(start_)) : 0;
40*635a8641SAndroid Build Coastguard Worker   uint32_t end = end_ > 0 ? static_cast<uint32_t>(std::ceil(end_)) : 0;
41*635a8641SAndroid Build Coastguard Worker   return Range(start, end);
42*635a8641SAndroid Build Coastguard Worker }
43*635a8641SAndroid Build Coastguard Worker 
Round() const44*635a8641SAndroid Build Coastguard Worker Range RangeF::Round() const {
45*635a8641SAndroid Build Coastguard Worker   uint32_t start = start_ > 0 ? static_cast<uint32_t>(std::round(start_)) : 0;
46*635a8641SAndroid Build Coastguard Worker   uint32_t end = end_ > 0 ? static_cast<uint32_t>(std::round(end_)) : 0;
47*635a8641SAndroid Build Coastguard Worker   return Range(start, end);
48*635a8641SAndroid Build Coastguard Worker }
49*635a8641SAndroid Build Coastguard Worker 
ToString() const50*635a8641SAndroid Build Coastguard Worker std::string RangeF::ToString() const {
51*635a8641SAndroid Build Coastguard Worker   return base::StringPrintf("{%f,%f}", start(), end());
52*635a8641SAndroid Build Coastguard Worker }
53*635a8641SAndroid Build Coastguard Worker 
operator <<(std::ostream & os,const RangeF & range)54*635a8641SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const RangeF& range) {
55*635a8641SAndroid Build Coastguard Worker   return os << range.ToString();
56*635a8641SAndroid Build Coastguard Worker }
57*635a8641SAndroid Build Coastguard Worker 
58*635a8641SAndroid Build Coastguard Worker }  // namespace gfx
59