12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkSafeRange_DEFINED
- #define SkSafeRange_DEFINED
- #include "include/core/SkTypes.h"
- #include <cstdint>
- // SkSafeRange always check that a series of operations are in-range.
- // This check is sticky, so that if any one operation fails, the object will remember that and
- // return false from ok().
- class SkSafeRange {
- public:
- operator bool() const { return fOK; }
- bool ok() const { return fOK; }
- // checks 0 <= value <= max.
- // On success, returns value
- // On failure, returns 0 and sets ok() to false
- template <typename T> T checkLE(uint64_t value, T max) {
- SkASSERT(static_cast<int64_t>(max) >= 0);
- if (value > static_cast<uint64_t>(max)) {
- fOK = false;
- value = 0;
- }
- return static_cast<T>(value);
- }
- int checkGE(int value, int min) {
- if (value < min) {
- fOK = false;
- value = min;
- }
- return value;
- }
- private:
- bool fOK = true;
- };
- #endif
|