{#
 SPDX-FileCopyrightText: Copyright 2021 Arm Limited and/or its affiliates <open-source-office@arm.com>
 SPDX-License-Identifier: Apache-2.0

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
#}
{{common_template_header}}

#ifndef GENERATED_TEST_DATA_H
#define GENERATED_TEST_DATA_H

#include <cstdint>

{% for namespace in namespaces %}
namespace {{namespace}} {
{% endfor %}

#define NUMBER_OF_IFM_FILES  ({{ifm_count}}U)
#define NUMBER_OF_OFM_FILES  ({{ofm_count}}U)
{% for ifm_size in ifm_var_sizes %}
#define IFM_{{loop.index0}}_DATA_SIZE  ({{ifm_size}}U)
{% endfor %}
{% for ofm_size in ofm_var_sizes %}
#define OFM_{{loop.index0}}_DATA_SIZE  ({{ofm_size}}U)
{% endfor %}

{% for ifm_var_name in ifm_var_names %}
extern const {{data_type}} {{ifm_var_name}}[IFM_{{loop.index0}}_DATA_SIZE];
{% endfor %}

{% for ofm_var_name in ofm_var_names %}
extern const {{data_type}} {{ofm_var_name}}[OFM_{{loop.index0}}_DATA_SIZE];
{% endfor %}

const {{data_type}}* get_ifm_data_array(const uint32_t idx);
const {{data_type}}* get_ofm_data_array(const uint32_t idx);

{% for namespace in namespaces %}
} /* namespace {{namespace}} */
{% endfor %}

#endif /* GENERATED_TEST_DATA_H */
