/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SKSL_SWITCHCASE #define SKSL_SWITCHCASE #include "SkSLExpression.h" #include "SkSLStatement.h" namespace SkSL { /** * A single case of a 'switch' statement. */ struct SwitchCase : public Statement { SwitchCase(int offset, std::unique_ptr<Expression> value, std::vector<std::unique_ptr<Statement>> statements) : INHERITED(offset, kSwitch_Kind) , fValue(std::move(value)) , fStatements(std::move(statements)) {} std::unique_ptr<Statement> clone() const override { std::vector<std::unique_ptr<Statement>> cloned; for (const auto& s : fStatements) { cloned.push_back(s->clone()); } return std::unique_ptr<Statement>(new SwitchCase(fOffset, fValue ? fValue->clone() : nullptr, std::move(cloned))); } String description() const override { String result; if (fValue) { result.appendf("case %s:\n", fValue->description().c_str()); } else { result += "default:\n"; } for (const auto& s : fStatements) { result += s->description() + "\n"; } return result; } // null value implies "default" case std::unique_ptr<Expression> fValue; std::vector<std::unique_ptr<Statement>> fStatements; typedef Statement INHERITED; }; } // namespace #endif