CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
hrydgard

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

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