{#
 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}}

#include "BufAttributes.hpp"

#include <vector>
#include <string>

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

static const char * labelsVec[] LABELS_ATTRIBUTE = {
{% for label in labels %}
    "{{label}}",
{% endfor %}
};

bool GetLabelsVector(std::vector<std::string>& labels)
{
    constexpr size_t labelsSz = {{labelsSize}};
    labels.clear();

    if (!labelsSz) {
        return false;
    }

    labels.reserve(labelsSz);

    for (size_t i = 0; i < labelsSz; ++i) {
        labels.emplace_back(labelsVec[i]);
    }

    return true;
}

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