/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SKSL_APPENDSTAGE #define SKSL_APPENDSTAGE #ifndef SKSL_STANDALONE #include "SkRasterPipeline.h" #include "SkSLContext.h" #include "SkSLExpression.h" namespace SkSL { struct AppendStage : public Expression { AppendStage(const Context& context, int offset, SkRasterPipeline::StockStage stage, std::vector> arguments) : INHERITED(offset, kAppendStage_Kind, *context.fVoid_Type) , fStage(stage) , fArguments(std::move(arguments)) {} std::unique_ptr clone() const override { std::vector> cloned; for (const auto& arg : fArguments) { cloned.push_back(arg->clone()); } return std::unique_ptr(new AppendStage(fOffset, fStage, std::move(cloned), &fType)); } String description() const override { String result = "append("; const char* separator = ""; for (const auto& a : fArguments) { result += separator; result += a->description(); separator = ", "; } result += ")"; return result; } bool hasSideEffects() const override { return true; } SkRasterPipeline::StockStage fStage; std::vector> fArguments; typedef Expression INHERITED; private: AppendStage(int offset, SkRasterPipeline::StockStage stage, std::vector> arguments, const Type* type) : INHERITED(offset, kAppendStage_Kind, *type) , fStage(stage) , fArguments(std::move(arguments)) {} }; } // namespace #endif // SKSL_STANDALONE #endif // SKSL_APPENDSTAGE