nixd
Loading...
Searching...
No Matches
ArrayRef.h
Go to the documentation of this file.
1/// \file
2/// \brief `ArrayRef`, `BytesRef`, and related functions.
3#pragma once
4
5#include <string_view>
6
7namespace nixt {
8
9/// \brief Weak reference to an array, with begin and end pointers.
10/// \note Please always pass/return by value and don't add member functions.
11template <class T> struct ArrayRef {
12 const T *Begin;
13 const T *End;
14};
15
17
18/// \brief Iterator begin. Used for `range-based-for`
19template <class T> inline const T *begin(ArrayRef<T> B) { return B.Begin; }
20
21/// \brief Iterator end.
22template <class T> inline const T *end(ArrayRef<T> B) { return B.End; }
23
24inline std::string_view view(BytesRef B) { return {B.Begin, B.End}; }
25
26/// \brief Advance the beginning pointer of bytes array.
27template <class T> inline ArrayRef<T> advance(ArrayRef<T> B, long Offset) {
28 return {B.Begin + Offset, B.End};
29}
30/// \brief Get length of this array.
31template <class T> inline std::size_t lengthof(ArrayRef<T> B) {
32 return B.End - B.Begin;
33}
34
35} // namespace nixt
Access EvalCache in nix::EvalState.
Definition ArrayRef.h:7
const T * begin(ArrayRef< T > B)
Iterator begin. Used for range-based-for
Definition ArrayRef.h:19
std::string_view view(BytesRef B)
Definition ArrayRef.h:24
ArrayRef< T > advance(ArrayRef< T > B, long Offset)
Advance the beginning pointer of bytes array.
Definition ArrayRef.h:27
const T * end(ArrayRef< T > B)
Iterator end.
Definition ArrayRef.h:22
std::size_t lengthof(ArrayRef< T > B)
Get length of this array.
Definition ArrayRef.h:31
Weak reference to an array, with begin and end pointers.
Definition ArrayRef.h:11
const T * End
Definition ArrayRef.h:13
const T * Begin
Definition ArrayRef.h:12