/* * 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_BLOCK #define SKSL_DSL_BLOCK #include "include/private/SkSLDefines.h" #include "include/private/base/SkTArray.h" #include "include/sksl/DSLStatement.h" #include "include/sksl/SkSLPosition.h" #include namespace SkSL { class Block; class SymbolTable; namespace dsl { class DSLBlock { public: template DSLBlock(Statements... statements) { fStatements.reserve_back(sizeof...(statements)); ((void)fStatements.push_back(DSLStatement(statements.release()).release()), ...); } DSLBlock(SkSL::StatementArray statements, std::shared_ptr symbols = nullptr, Position pos = {}); DSLBlock(SkTArray statements, std::shared_ptr symbols = nullptr, Position pos = {}); DSLBlock(DSLBlock&& other) = default; DSLBlock& operator=(DSLBlock&& other) = default; ~DSLBlock() = default; void append(DSLStatement stmt); std::unique_ptr release(); private: SkSL::StatementArray fStatements; std::shared_ptr fSymbols; Position fPosition; }; } // namespace dsl } // namespace SkSL #endif