intercom-common 0.3.0

See 'intercom'
Documentation

#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