Flutter Impeller
range.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 #ifndef FLUTTER_IMPELLER_CORE_RANGE_H_
6 #define FLUTTER_IMPELLER_CORE_RANGE_H_
7 
8 #include <algorithm>
9 #include <cstddef>
10 
11 namespace impeller {
12 
13 struct Range {
14  size_t offset = 0;
15  size_t length = 0;
16 
17  constexpr Range() {}
18 
19  constexpr Range(size_t p_offset, size_t p_length)
20  : offset(p_offset), length(p_length) {}
21 
22  constexpr bool operator==(const Range& o) const {
23  return offset == o.offset && length == o.length;
24  }
25 
26  /// @brief Create a new range that is a union of this range and other.
27  constexpr Range Merge(const Range& other) {
28  if (other.length == 0) {
29  return *this;
30  }
31  if (length == 0) {
32  return other;
33  }
34  auto end_offset = std::max(offset + length, other.offset + other.length);
35  auto start_offset = std::min(offset, other.offset);
36  return Range{start_offset, end_offset - start_offset};
37  }
38 };
39 
40 } // namespace impeller
41 
42 #endif // FLUTTER_IMPELLER_CORE_RANGE_H_
constexpr Range()
Definition: range.h:17
size_t length
Definition: range.h:15
constexpr Range(size_t p_offset, size_t p_length)
Definition: range.h:19
size_t offset
Definition: range.h:14
constexpr Range Merge(const Range &other)
Create a new range that is a union of this range and other.
Definition: range.h:27
constexpr bool operator==(const Range &o) const
Definition: range.h:22