1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ui/gfx/range/range.h" 6 7#include <algorithm> 8#include <limits> 9 10#include "base/format_macros.h" 11#include "base/logging.h" 12#include "base/strings/stringprintf.h" 13 14namespace gfx { 15 16Range::Range() 17 : start_(0), 18 end_(0) { 19} 20 21Range::Range(size_t start, size_t end) 22 : start_(start), 23 end_(end) { 24} 25 26Range::Range(size_t position) 27 : start_(position), 28 end_(position) { 29} 30 31// static 32const Range Range::InvalidRange() { 33 return Range(std::numeric_limits<size_t>::max()); 34} 35 36bool Range::IsValid() const { 37 return *this != InvalidRange(); 38} 39 40size_t Range::GetMin() const { 41 return std::min(start(), end()); 42} 43 44size_t Range::GetMax() const { 45 return std::max(start(), end()); 46} 47 48bool Range::operator==(const Range& other) const { 49 return start() == other.start() && end() == other.end(); 50} 51 52bool Range::operator!=(const Range& other) const { 53 return !(*this == other); 54} 55 56bool Range::EqualsIgnoringDirection(const Range& other) const { 57 return GetMin() == other.GetMin() && GetMax() == other.GetMax(); 58} 59 60bool Range::Intersects(const Range& range) const { 61 return IsValid() && range.IsValid() && 62 !(range.GetMax() < GetMin() || range.GetMin() >= GetMax()); 63} 64 65bool Range::Contains(const Range& range) const { 66 return IsValid() && range.IsValid() && 67 GetMin() <= range.GetMin() && range.GetMax() <= GetMax(); 68} 69 70Range Range::Intersect(const Range& range) const { 71 size_t min = std::max(GetMin(), range.GetMin()); 72 size_t max = std::min(GetMax(), range.GetMax()); 73 74 if (min >= max) // No intersection. 75 return InvalidRange(); 76 77 return Range(min, max); 78} 79 80std::string Range::ToString() const { 81 return base::StringPrintf("{%" PRIuS ",%" PRIuS "}", start(), end()); 82} 83 84std::ostream& operator<<(std::ostream& os, const Range& range) { 85 return os << range.ToString(); 86} 87 88} // namespace gfx 89