diff options
author | 2022-04-03 16:34:10 -0700 | |
---|---|---|
committer | 2022-04-03 16:34:10 -0700 | |
commit | a87508008dfa1604baf2d4e39bf44704c00f261c (patch) | |
tree | 0be2ade96772037a02803b30e157c367d931e3d9 /src/deps/skia/include/sksl/DSLWrapper.h | |
parent | 4a19a3f07f1887903e5638a3be167f0c7b377ba3 (diff) | |
download | bun-jarred/canvas.tar.gz bun-jarred/canvas.tar.zst bun-jarred/canvas.zip |
skia WIPjarred/canvas
Diffstat (limited to '')
-rw-r--r-- | src/deps/skia/include/sksl/DSLWrapper.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/deps/skia/include/sksl/DSLWrapper.h b/src/deps/skia/include/sksl/DSLWrapper.h new file mode 100644 index 000000000..96daa22dd --- /dev/null +++ b/src/deps/skia/include/sksl/DSLWrapper.h @@ -0,0 +1,77 @@ +/* + * Copyright 2021 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SKSL_DSL_WRAPPER +#define SKSL_DSL_WRAPPER + +#include <memory> + +namespace SkSL { + +namespace dsl { + +/** + * Several of the DSL classes override operator= in a non-standard fashion to allow for expressions + * like "x = 0" to compile into SkSL code. This makes it impossible to directly use these classes in + * C++ containers which expect standard behavior for operator=. + * + * Wrapper<T> contains a T, where T is a DSL class with non-standard operator=, and provides + * standard behavior for operator=, permitting it to be used in standard containers. + */ +template<typename T> +class DSLWrapper { +public: + DSLWrapper(T value) { + fValue.swap(value); + } + + DSLWrapper(const DSLWrapper&) = delete; + + DSLWrapper(DSLWrapper&& other) { + fValue.swap(other.fValue); + } + + T& get() { + return fValue; + } + + T& operator*() { + return fValue; + } + + T* operator->() { + return &fValue; + } + + const T& get() const { + return fValue; + } + + const T& operator*() const { + return fValue; + } + + const T* operator->() const { + return &fValue; + } + + DSLWrapper& operator=(const DSLWrapper&) = delete; + + DSLWrapper& operator=(DSLWrapper&& other) { + fValue.swap(other.fValue); + return *this; + } + +private: + T fValue; +}; + +} // namespace dsl + +} // namespace SkSL + +#endif |