blob: b1208d1bb77686144cdc45389b84061a6afa6008 [file] [log] [blame] [edit]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_IMPELLER_CORE_RANGE_H_
#define FLUTTER_IMPELLER_CORE_RANGE_H_
#include <algorithm>
#include <cstddef>
namespace impeller {
struct Range {
size_t offset = 0;
size_t length = 0;
constexpr Range() {}
constexpr Range(size_t p_offset, size_t p_length)
: offset(p_offset), length(p_length) {}
constexpr bool operator==(const Range& o) const {
return offset == o.offset && length == o.length;
}
/// @brief Create a new range that is a union of this range and other.
constexpr Range Merge(const Range& other) {
if (other.length == 0) {
return *this;
}
if (length == 0) {
return other;
}
auto end_offset = std::max(offset + length, other.offset + other.length);
auto start_offset = std::min(offset, other.offset);
return Range{start_offset, end_offset - start_offset};
}
};
} // namespace impeller
#endif // FLUTTER_IMPELLER_CORE_RANGE_H_