isce3 0.25.0
Loading...
Searching...
No Matches
SSOBuffer.h
1#pragma once
2
3#include <vector>
4
5namespace isce3::core::detail {
6
12template<typename T, size_t NMAX = 32>
13class SSOBuffer {
14public:
20 SSOBuffer(size_t n) : size_ {n}
21 {
22 if (n <= NMAX) {
23 ptr_ = stackbuf_;
24 } else {
25 heapbuf_.resize(n);
26 ptr_ = heapbuf_.data();
27 }
28 }
29
31 size_t size() const { return size_; }
32
34 const T* data() const { return ptr_; }
35
37 T* data() { return ptr_; }
38
40 const T& operator[](size_t i) const { return ptr_[i]; }
41
43 T& operator[](size_t i) { return ptr_[i]; }
44
45 // Don't bother implementing copy & assignment, so delete default ones
46 SSOBuffer(const SSOBuffer&) = delete;
47 SSOBuffer& operator= (const SSOBuffer&) = delete;
48
49private:
50 T stackbuf_[NMAX];
51 std::vector<T> heapbuf_;
52 T* ptr_;
53 const size_t size_;
54};
55
56} // namespace isce3::core::detail
Small-size optimized (SSO) buffer.
Definition SSOBuffer.h:13
const T * data() const
const pointer to the underlying array serving as element storage
Definition SSOBuffer.h:34
SSOBuffer(size_t n)
Constructor.
Definition SSOBuffer.h:20
T * data()
pointer to the underlying array serving as element storage
Definition SSOBuffer.h:37
const T & operator[](size_t i) const
Index (read).
Definition SSOBuffer.h:40
size_t size() const
Number of elements that can be stored in the buffer.
Definition SSOBuffer.h:31
T & operator[](size_t i)
Index (write).
Definition SSOBuffer.h:43

Generated for ISCE3.0 by doxygen 1.13.2.