libcamera/utils/ipc/generators/libcamera_templates/definition_functions.tmpl
Paul Elder 207c9e1c1d utils: ipc: Add support for Flags
Add Flags<E> as a supported type in the IPA interface.

It is used in mojom with the [flags] attribute. Any field or parameter
type E that is prefixed with the [flags] attribute will direct the code
generator to generate the type name "Flags<E>" and appropriate
serialization/deserialization code for Flags<E> instead of for E.

It is usable and has been tested in struct members, function input and
output parameters, and Signal parameters. This does not add support for
returning Flags as direct return values.

Additionally, the [scopedEnum] attribute can be used on enum
definitions, which will instruct the code generator to convert it to an
enum class instead of a raw enum.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2022-10-18 18:51:33 +09:00

56 lines
1.3 KiB
Cheetah

{#-
# SPDX-License-Identifier: LGPL-2.1-or-later
# Copyright (C) 2020, Google Inc.
-#}
{#
# \brief Generate enum definition
#
# \param enum Enum object whose definition is to be generated
#}
{%- macro define_enum(enum) -%}
enum{{" class" if enum|is_scoped}} {{enum.mojom_name}} {
{%- for field in enum.fields %}
{{field.mojom_name}} = {{field.numeric_value}},
{%- endfor %}
};
{%- endmacro -%}
{#
# \brief Generate struct definition
#
# \param struct Struct object whose definition is to be generated
#}
{%- macro define_struct(struct) -%}
struct {{struct.mojom_name}}
{
public:
#ifndef __DOXYGEN__
{{struct.mojom_name}}() {%- if struct|has_default_fields %}
:{% endif %}
{%- for field in struct.fields|with_default_values -%}
{{" " if loop.first}}{{field.mojom_name}}({{field|default_value}}){{", " if not loop.last}}
{%- endfor %}
{
}
{{struct.mojom_name}}(
{%- for field in struct.fields -%}
{{"const " if not field|is_pod}}{{field|name}} {{"&" if not field|is_pod}}_{{field.mojom_name}}{{", " if not loop.last}}
{%- endfor -%}
)
:
{%- for field in struct.fields -%}
{{" " if loop.first}}{{field.mojom_name}}(_{{field.mojom_name}}){{", " if not loop.last}}
{%- endfor %}
{
}
#endif
{% for field in struct.fields %}
{{field|name}} {{field.mojom_name}};
{%- endfor %}
};
{%- endmacro -%}