112e714ceSopenharmony_ci/*
212e714ceSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
312e714ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
412e714ceSopenharmony_ci * you may not use this file except in compliance with the License.
512e714ceSopenharmony_ci * You may obtain a copy of the License at
612e714ceSopenharmony_ci *
712e714ceSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
812e714ceSopenharmony_ci *
912e714ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1012e714ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1112e714ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212e714ceSopenharmony_ci * See the License for the specific language governing permissions and
1312e714ceSopenharmony_ci * limitations under the License.
1412e714ceSopenharmony_ci */
1512e714ceSopenharmony_ci
1612e714ceSopenharmony_ci#ifndef TEST_FUZZTEST_GETDATA_H
1712e714ceSopenharmony_ci#define TEST_FUZZTEST_GETDATA_H
1812e714ceSopenharmony_ci
1912e714ceSopenharmony_ci#include <cstdint>
2012e714ceSopenharmony_ci
2112e714ceSopenharmony_ci#include "../../common/log.h"
2212e714ceSopenharmony_ci#include "securec.h"
2312e714ceSopenharmony_ci
2412e714ceSopenharmony_cinamespace OHOS {
2512e714ceSopenharmony_cinamespace NeuralNetworkRuntime {
2612e714ceSopenharmony_ciclass Data {
2712e714ceSopenharmony_cipublic:
2812e714ceSopenharmony_ci    Data(const uint8_t* data, size_t size)
2912e714ceSopenharmony_ci    {
3012e714ceSopenharmony_ci        dataFuzz = data;
3112e714ceSopenharmony_ci        dataSize = size;
3212e714ceSopenharmony_ci    }
3312e714ceSopenharmony_ci
3412e714ceSopenharmony_ci    template<class T> T GetData()
3512e714ceSopenharmony_ci    {
3612e714ceSopenharmony_ci        T object {};
3712e714ceSopenharmony_ci        size_t objectSize = sizeof(object);
3812e714ceSopenharmony_ci        if (dataFuzz == nullptr || objectSize > dataSize - dataPos) {
3912e714ceSopenharmony_ci            LOGE("[GetData]Data is not enough.");
4012e714ceSopenharmony_ci            return {};
4112e714ceSopenharmony_ci        }
4212e714ceSopenharmony_ci        if (memcpy_s(&object, objectSize, dataFuzz + dataPos, objectSize) != EOK) {
4312e714ceSopenharmony_ci            LOGE("[GetData]Memcpy_s failed.");
4412e714ceSopenharmony_ci            return {};
4512e714ceSopenharmony_ci        }
4612e714ceSopenharmony_ci        dataPos = dataPos + objectSize;
4712e714ceSopenharmony_ci        return object;
4812e714ceSopenharmony_ci    }
4912e714ceSopenharmony_ci
5012e714ceSopenharmony_ci    const uint8_t* GetNowData() const
5112e714ceSopenharmony_ci    {
5212e714ceSopenharmony_ci        return dataFuzz + dataPos;
5312e714ceSopenharmony_ci    }
5412e714ceSopenharmony_ci
5512e714ceSopenharmony_ci    size_t GetNowDataSize() const
5612e714ceSopenharmony_ci    {
5712e714ceSopenharmony_ci        return dataSize - dataPos;
5812e714ceSopenharmony_ci    }
5912e714ceSopenharmony_ci
6012e714ceSopenharmony_ci    const uint8_t* GetSpecificData(size_t startPos, size_t& size) const
6112e714ceSopenharmony_ci    {
6212e714ceSopenharmony_ci        if ((startPos + size) > dataSize) {
6312e714ceSopenharmony_ci            size = dataSize - startPos;
6412e714ceSopenharmony_ci        }
6512e714ceSopenharmony_ci        return dataFuzz + startPos;
6612e714ceSopenharmony_ci    }
6712e714ceSopenharmony_ci
6812e714ceSopenharmony_ciprivate:
6912e714ceSopenharmony_ci    const uint8_t* dataFuzz {nullptr};
7012e714ceSopenharmony_ci    size_t dataSize {0};
7112e714ceSopenharmony_ci    size_t dataPos {0};
7212e714ceSopenharmony_ci};
7312e714ceSopenharmony_ci} // namespace NeuralNetworkRuntime
7412e714ceSopenharmony_ci} // namespace OHOS
7512e714ceSopenharmony_ci
7612e714ceSopenharmony_ci#endif