/* * Copyright (C) 2018-2023 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include namespace NEO { template struct Range { using iterator = DataType *; using const_iterator = const DataType *; using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; Range() : begIt(nullptr), endIt(nullptr) { } explicit Range(DataType *base, size_t count = 1) : begIt(base), endIt(base + count) { } template size())> Range(SequentialContainerT &container) : Range(&*container.begin(), container.size()) { } template Range(T (&base)[size]) : Range(&base[0], size) { } Range &operator=(const Range &) = delete; iterator begin() { return begIt; } iterator end() { return endIt; } const_iterator begin() const { return begIt; } const_iterator end() const { return endIt; } reverse_iterator rbegin() { return reverse_iterator(end()); } const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(end()) + (endIt - begIt); } const_reverse_iterator rend() const { return const_reverse_iterator(end()) + (endIt - begIt); } bool empty() const { return begIt == endIt; } size_t size() const { return endIt - begIt; } iterator begIt; iterator endIt; }; template inline Range createRange(T *base, size_t count) { return Range(base, count); } } // namespace NEO