Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hrydgard
GitHub Repository: hrydgard/ppsspp
Path: blob/master/Common/Data/Collections/Slice.h
3189 views
1
#pragma once
2
3
#include <vector>
4
#include <cstdlib>
5
6
// Like a const begin/end pair, just more convenient to use (and can only be used for linear array data).
7
// Inspired by Rust's slices and Google's StringPiece.
8
template <class T>
9
struct Slice {
10
Slice() : data_(nullptr), size_(0) {}
11
12
// View some memory as a slice.
13
Slice(const T *data, size_t size) : data_(data), size_(size) {}
14
15
// Intentionally non-explicit.
16
// View a const array as a slice.
17
template<size_t N>
18
Slice(const T(&data)[N]) : data_(data), size_(N) {}
19
20
// Intentionally non-explicit.
21
// View a const array as a slice.
22
Slice(const std::vector<T> &data) : data_(data.data()), size_(data.size()) {}
23
24
const T &operator[](size_t index) const {
25
return data_[index];
26
}
27
28
size_t size() const {
29
return size_;
30
}
31
32
// "Iterators"
33
const T *begin() const {
34
return data_;
35
}
36
const T *end() const {
37
return data_ + size_;
38
}
39
40
static Slice empty() {
41
return Slice<T>(nullptr, 0);
42
}
43
44
bool is_empty() const {
45
return size_ == 0;
46
}
47
48
private:
49
const T *data_;
50
size_t size_;
51
};
52
53