diff options
Diffstat (limited to 'src/deps/skia/include/sksl/DSLCase.h')
-rw-r--r-- | src/deps/skia/include/sksl/DSLCase.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/deps/skia/include/sksl/DSLCase.h b/src/deps/skia/include/sksl/DSLCase.h new file mode 100644 index 000000000..5b006e7e2 --- /dev/null +++ b/src/deps/skia/include/sksl/DSLCase.h @@ -0,0 +1,68 @@ +/* + * 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_CASE +#define SKSL_DSL_CASE + +#include "include/private/SkSLDefines.h" +#include "include/sksl/DSLExpression.h" +#include "include/sksl/DSLStatement.h" + +#include <memory> + +namespace SkSL { + +class Statement; + +namespace dsl { + +class DSLCase { +public: + // An empty expression means 'default:'. + template<class... Statements> + DSLCase(DSLExpression value, Statements... statements) + : fValue(std::move(value)) { + fStatements.reserve_back(sizeof...(statements)); + // in C++17, we could just do: + // (fStatements.push_back(DSLStatement(std::move(statements)).release()), ...); + int unused[] = + {0, + (static_cast<void>(fStatements.push_back(DSLStatement(std::move(statements)).release())), + 0)...}; + static_cast<void>(unused); + } + + DSLCase(DSLExpression value, SkTArray<DSLStatement> statements, + PositionInfo info = PositionInfo::Capture()); + + DSLCase(DSLExpression value, SkSL::StatementArray statements, + PositionInfo info = PositionInfo::Capture()); + + DSLCase(DSLCase&&); + + ~DSLCase(); + + DSLCase& operator=(DSLCase&&); + + void append(DSLStatement stmt); + +private: + DSLExpression fValue; + SkSL::StatementArray fStatements; + PositionInfo fPosition; + + friend class DSLCore; + + template<class... Cases> + friend DSLPossibleStatement Switch(DSLExpression value, Cases... cases); +}; + +} // namespace dsl + +} // namespace SkSL + +#endif |