diff options
author | John Reck <jreck@google.com> | 2018-11-15 15:21:29 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2018-11-15 15:22:29 -0800 |
commit | 8e539ca15c43b7148e9b30fe6b0dc02ce6a66dc4 (patch) | |
tree | ce3e2665962218c5516fa82a49c0f3921a8f5e0d /libs/hwui/utils | |
parent | 9da5f37f8fd18044364ff3d2791338f9709721fc (diff) |
Add a sprinkle of speculative anti-crash dust
Bugs: way too many
Bug: 113367810
Test: well it builds...
Change-Id: If00bcaad1c535c4996b59c1b5a7d3a4bba849191
Diffstat (limited to 'libs/hwui/utils')
-rw-r--r-- | libs/hwui/utils/Result.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/libs/hwui/utils/Result.h b/libs/hwui/utils/Result.h new file mode 100644 index 000000000000..7f33f2e3424d --- /dev/null +++ b/libs/hwui/utils/Result.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <variant> +#include <log/log.h> + +namespace android::uirenderer { + +template <typename E> +struct Error { + E error; +}; + +template <typename R, typename E> +class Result { +public: + Result(const R& r) : result(std::forward<R>(r)) {} + Result(R&& r) : result(std::forward<R>(r)) {} + Result(Error<E>&& error) : result(std::forward<Error<E>>(error)) {} + + operator bool() const { + return result.index() == 0; + } + + R unwrap() const { + LOG_ALWAYS_FATAL_IF(result.index() == 1, "unwrap called on error value!"); + return std::get<R>(result); + } + + E error() const { + LOG_ALWAYS_FATAL_IF(result.index() == 0, "No error to get from Result"); + return std::get<Error<E>>(result).error; + } + +private: + std::variant<R, Error<E>> result; +}; + +}; // namespace android::uirenderer |