1/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SKSL_ENUM
9#define SKSL_ENUM
10
11#include "SkSLProgramElement.h"
12namespace SkSL {
13
14struct Enum : public ProgramElement {
15    Enum(int offset, StringFragment typeName, std::shared_ptr<SymbolTable> symbols)
16    : INHERITED(offset, kEnum_Kind)
17    , fTypeName(typeName)
18    , fSymbols(std::move(symbols)) {}
19
20    String description() const override {
21        String result = "enum class " + fTypeName + " {\n";
22        String separator;
23        for (auto iter = fSymbols->begin(); iter != fSymbols->end(); ++iter) {
24            result += separator + "    " + iter->first + " = " +
25                      ((Variable&) *iter->second).fInitialValue->description();
26            separator = ",\n";
27        }
28        result += "\n};";
29        return result;
30    }
31
32    bool fBuiltin = false;
33    const StringFragment fTypeName;
34    const std::shared_ptr<SymbolTable> fSymbols;
35
36    typedef ProgramElement INHERITED;
37};
38
39} // namespace
40
41#endif
42