FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
span.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <type_traits>
6#include <vector>
7
8namespace fcb {
9
13template <typename T> class span {
14 public:
15 span() noexcept : data_(nullptr), size_(0) {}
16 span(T* data, std::size_t size) noexcept : data_(data), size_(size) {}
17
19 template <typename U, typename = std::enable_if_t<std::is_same<const U, T>::value>>
20 span(const std::vector<U>& v) noexcept : data_(v.data()), size_(v.size()) {}
21
23 span(std::vector<std::remove_const_t<T>>& v) noexcept : data_(v.data()), size_(v.size()) {}
24
25 T* data() const noexcept { return data_; }
26 std::size_t size() const noexcept { return size_; }
27 bool empty() const noexcept { return size_ == 0; }
28
29 T& operator[](std::size_t i) const noexcept { return data_[i]; }
30 T* begin() const noexcept { return data_; }
31 T* end() const noexcept { return data_ + size_; }
32
33 span subspan(std::size_t offset, std::size_t count) const noexcept {
34 return span(data_ + offset, count);
35 }
36
37 private:
38 T* data_;
39 std::size_t size_;
40};
41
44
45} // namespace fcb
Minimal C++17 stand-in for std::span: a non-owning view over contiguous memory.
Definition span.hpp:13
bool empty() const noexcept
Definition span.hpp:27
T * begin() const noexcept
Definition span.hpp:30
T * end() const noexcept
Definition span.hpp:31
span(const std::vector< U > &v) noexcept
Implicit view over a const vector, for span<const U>.
Definition span.hpp:20
span(T *data, std::size_t size) noexcept
Definition span.hpp:16
std::size_t size() const noexcept
Definition span.hpp:26
span() noexcept
Definition span.hpp:15
T * data() const noexcept
Definition span.hpp:25
span(std::vector< std::remove_const_t< T > > &v) noexcept
Implicit view over a mutable vector.
Definition span.hpp:23
T & operator[](std::size_t i) const noexcept
Definition span.hpp:29
span subspan(std::size_t offset, std::size_t count) const noexcept
Definition span.hpp:33
std::uint64_t offset
Definition stree.cpp:57