// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file has been auto-generated by {{code_generator}}. DO NOT MODIFY!

#ifndef {{cpp_class}}_h
#define {{cpp_class}}_h

{% for filename in header_includes %}
#include "{{filename}}"
{% endfor %}

namespace blink {

class {{cpp_class}} FINAL : public GarbageCollectedFinalized<{{cpp_class}}> {
public:
    static {{cpp_class}}* create()
    {
        return new {{cpp_class}};
    }

    {% for member in members %}
    bool {{member.has_method_name}}() const { return {{member.has_method_expression}}; }
    {{member.rvalue_cpp_type}} {{member.name}}() const { return {{member.getter_expression}}; }
    void {{member.setter_name}}({{member.rvalue_cpp_type}} value) { m_{{member.name}} = value; }
    {% endfor %}

    void trace(Visitor*);

private:
    {{cpp_class}}();

    {% for member in members %}
    {{member.member_cpp_type}} m_{{member.name}};
    {% endfor %}

    friend class V8{{cpp_class}};
};

} // namespace blink

#endif // {{cpp_class}}_h
