nk
1.0.0
C++ Numerical Computing Runtime
Toggle main menu visibility
Loading...
Searching...
No Matches
span.hpp
1
// include/span.hpp
2
#pragma once
3
4
#include <cstddef>
5
#include <vector>
6
7
namespace
nk {
8
9
template
<
typename
T>
10
class
Span
11
{
12
public
:
13
Span()
14
: data_(
nullptr
)
15
, size_(0)
16
{}
17
Span(T *d,
size_t
n)
18
: data_(d)
19
, size_(n)
20
{}
21
22
// Construct from vector (const or non-const depending on T)
23
template<typename U = T, typename std::enable_if<std::is_const<U>::value,
int
>::type = 0>
24
Span(
const
std::vector<
typename
std::remove_const<T>::type> &v)
25
: data_(v.data())
26
, size_(v.size())
27
{}
28
29
template<typename U = T, typename std::enable_if<!std::is_const<U>::value,
int
>::type = 0>
30
Span(std::vector<T> &v)
31
: data_(v.data())
32
, size_(v.size())
33
{}
34
35
T &operator[](
size_t
i)
const
{
return
data_[i]; }
36
size_t
size()
const
{
return
size_; }
37
bool
empty()
const
{
return
size_ == 0; }
38
T *data()
const
{
return
data_; }
39
T *begin()
const
{
return
data_; }
40
T *end()
const
{
return
data_ + size_; }
41
42
Span subspan(
size_t
offset)
const
{
return
{data_ + offset, size_ - offset}; }
43
Span subspan(
size_t
offset,
size_t
count)
const
{
return
{data_ + offset, count}; }
44
45
private
:
46
T *data_;
47
size_t
size_;
48
};
49
50
}
// namespace nk
src
value
include
nk
value
span.hpp
Generated by
1.17.0