/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SKSL_MODIFIERDECLARATION
#define SKSL_MODIFIERDECLARATION

#include "include/private/SkSLModifiers.h"
#include "include/private/SkSLProgramElement.h"

namespace SkSL {

/**
 * A declaration that consists only of modifiers, e.g.:
 *
 * layout(blend_support_all_equations) out;
 */
class ModifiersDeclaration final : public ProgramElement {
public:
    inline static constexpr Kind kProgramElementKind = Kind::kModifiers;

    ModifiersDeclaration(const Modifiers* modifiers)
        : INHERITED(Position(), kProgramElementKind)
        , fModifiers(modifiers) {}

    const Modifiers& modifiers() const {
        return *fModifiers;
    }

    std::unique_ptr<ProgramElement> clone() const override {
        return std::make_unique<ModifiersDeclaration>(&this->modifiers());
    }

    std::string description() const override {
        return this->modifiers().description() + ";";
    }

private:
    const Modifiers* fModifiers;

    using INHERITED = ProgramElement;
};

}  // namespace SkSL

#endif
