/* * 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/private/base/SkTArray.h" #include "include/sksl/DSLExpression.h" #include "include/sksl/DSLStatement.h" #include "include/sksl/SkSLPosition.h" #include namespace SkSL { namespace dsl { class DSLCase { public: // An empty expression means 'default:'. template DSLCase(DSLExpression value, Statements... statements) : fValue(std::move(value)) { fStatements.reserve_back(sizeof...(statements)); ((void)fStatements.push_back(DSLStatement(std::move(statements)).release()), ...); } DSLCase(DSLExpression value, SkTArray statements, Position pos = {}); DSLCase(DSLExpression value, SkSL::StatementArray statements, Position pos = {}); DSLCase(DSLCase&&); ~DSLCase(); DSLCase& operator=(DSLCase&&); void append(DSLStatement stmt); private: DSLExpression fValue; SkSL::StatementArray fStatements; Position fPosition; friend class DSLCore; template friend DSLStatement Switch(DSLExpression value, Cases... cases); }; } // namespace dsl } // namespace SkSL #endif