#ifndef INTERCOM_LIBRARY_{{lib_name}}_H
#define INTERCOM_LIBRARY_{{lib_name}}_H
#include <array>
#include <intercom.hpp>
namespace {{lib_name}}
{
class Descriptor
{
public:
static const char NAME[];
static const char WINDOWS_NAME[];
static const char POSIX_NAME[];
static const std::array< intercom::CLSID, {{coclass_count}} > CLASSES;
static bool is_available();
};
namespace raw
{
{{~#each interfaces}}
struct {{name}};
{{~/each}}
{{~#each interfaces}}
struct {{name}}{{#if base}} : {{base}}{{/if}}
{
static const intercom::IID ID;
{{~#each methods}}
virtual {{ret_type}} INTERCOM_CC {{name}}(
{{~#each args~}}
{{arg_type}} {{name}}{{#unless @last}}, {{/unless}}
{{~/each~}}
) = 0;
{{~/each}}
};
{{~/each}}
{{~#each coclasses}}
class {{name}}Descriptor
{
public:
static const intercom::CLSID ID;
static const std::array<intercom::IID, {{interface_count}}> INTERFACES;
using Library = {{../lib_name}}::Descriptor;
{{name}}Descriptor() = delete;
~{{name}}Descriptor() = delete;
};
{{/each}}
}
}
#ifdef INTERCOM_FLATTEN_DECLARATIONS
{{~#each interfaces}}
static constexpr intercom::IID IID_{{name}} = {{iid_struct}};
using {{name}} = {{../lib_name}}::raw::{{name}};
{{~/each}}
{{~#each coclasses}}
static constexpr intercom::CLSID CLSID_{{name}} = {{clsid_struct}};
{{~/each}}
#endif
#endif