/* * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved * * 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. */ #ifndef __NEURUN_UTIL_FEATURE_NHWC_READER_H__ #define __NEURUN_UTIL_FEATURE_NHWC_READER_H__ #include "Utils.h" #include "misc/feature/Reader.h" namespace neurun { namespace util { namespace feature { namespace nhwc { template class Reader final : public nnfw::misc::feature::Reader { public: Reader(const ::nnfw::misc::feature::Shape &shape, const T *ptr, size_t len) : _shape{shape}, _ptr{ptr} { (void)len; // Workaround for unused variable in release mode assert(shape.N * shape.C * shape.H * shape.W * sizeof(T) == len); } public: const nnfw::misc::feature::Shape &shape(void) const { return _shape; } public: T at(uint32_t ch, uint32_t row, uint32_t col) const override { uint32_t index = index_of(_shape, ch, row, col); return _ptr[index]; } T at(uint32_t batch, uint32_t ch, uint32_t row, uint32_t col) const override { uint32_t index = index_of(_shape, batch, ch, row, col); return _ptr[index]; } private: nnfw::misc::feature::Shape _shape; private: const T *_ptr; }; } // namespace nhwc } // namespace feature } // namespace util } // namespace neurun #endif // __NEURUN_UTIL_FEATURE_NHWC_READER_H__