brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 43fa9a8 Raw
64 lines · c
1//===----------------------- adt.h - Handy ADTs -----------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of the ORC runtime support library.10//11//===----------------------------------------------------------------------===//12 13#ifndef ORC_RT_ADT_H14#define ORC_RT_ADT_H15 16#include <cstring>17#include <limits>18#include <ostream>19#include <string>20 21namespace orc_rt {22 23constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max();24 25/// A substitute for std::span (and llvm::ArrayRef).26/// FIXME: Remove in favor of std::span once we can use c++20.27template <typename T, std::size_t Extent = dynamic_extent> class span {28public:29  typedef T element_type;30  typedef std::remove_cv<T> value_type;31  typedef std::size_t size_type;32  typedef std::ptrdiff_t difference_type;33  typedef T *pointer;34  typedef const T *const_pointer;35  typedef T &reference;36  typedef const T &const_reference;37 38  typedef pointer iterator;39 40  static constexpr std::size_t extent = Extent;41 42  constexpr span() noexcept = default;43  constexpr span(T *first, size_type count) noexcept44      : Data(first), Size(count) {}45 46  template <std::size_t N>47  constexpr span(T (&arr)[N]) noexcept : Data(&arr[0]), Size(N) {}48 49  constexpr iterator begin() const noexcept { return Data; }50  constexpr iterator end() const noexcept { return Data + Size; }51  constexpr pointer data() const noexcept { return Data; }52  constexpr reference operator[](size_type idx) const { return Data[idx]; }53  constexpr size_type size() const noexcept { return Size; }54  constexpr bool empty() const noexcept { return Size == 0; }55 56private:57  T *Data = nullptr;58  size_type Size = 0;59};60 61} // namespace orc_rt62 63#endif // ORC_RT_ADT_H64