tesseract++ 0.0.1
N-dimensional tensor library for embedded systems
Loading...
Searching...
No Matches
dense_access.h
Go to the documentation of this file.
1#ifndef DENSE_ACCESS_H
2#define DENSE_ACCESS_H
3
4#include "config.h"
5#include "memory/mem_utils.h"
6
15template <typename T,
16 template <typename, my_size_t...> class PaddingPolicy,
17 template <typename, my_size_t> class StoragePolicy,
18 my_size_t... Dims>
20{
21public:
22 using PadPolicy = PaddingPolicy<T, Dims...>;
23
24 static constexpr my_size_t PhysicalSize = PadPolicy::PhysicalSize;
25
26private:
27 StoragePolicy<T, PhysicalSize> data_;
28
29public:
30 DenseAccess() = default;
31
32 explicit DenseAccess(T initValue)
33 {
34 fill_n_optimized(data_.data(), PhysicalSize, initValue);
35 }
36
37 // Rule of five
38 DenseAccess(const DenseAccess &) = default;
39 DenseAccess(DenseAccess &&) noexcept = default;
40 DenseAccess &operator=(const DenseAccess &) = default;
41 DenseAccess &operator=(DenseAccess &&) noexcept = default;
42 ~DenseAccess() = default;
43
44 // Element access (physical index)
45 FORCE_INLINE constexpr T &operator[](my_size_t idx) noexcept { return data_[idx]; }
46 FORCE_INLINE constexpr const T &operator[](my_size_t idx) const noexcept { return data_[idx]; }
47
48 FORCE_INLINE constexpr T &at(my_size_t idx) TESSERACT_CONDITIONAL_NOEXCEPT { return data_.at(idx); }
49 FORCE_INLINE constexpr const T &at(my_size_t idx) const TESSERACT_CONDITIONAL_NOEXCEPT { return data_.at(idx); }
50
51 // Pointer access
52 FORCE_INLINE constexpr T *data() noexcept { return data_.data(); }
53 FORCE_INLINE constexpr const T *data() const noexcept { return data_.data(); }
54
55 // Iterators
56 FORCE_INLINE constexpr T *begin() noexcept { return data_.begin(); }
57 FORCE_INLINE constexpr const T *begin() const noexcept { return data_.begin(); }
58
59 FORCE_INLINE constexpr T *end() noexcept { return data_.end(); }
60 FORCE_INLINE constexpr const T *end() const noexcept { return data_.end(); }
61};
62
63#endif // DENSE_ACCESS_H
Dense storage access with padding policy.
Definition dense_access.h:20
DenseAccess(DenseAccess &&) noexcept=default
FORCE_INLINE constexpr const T * data() const noexcept
Definition dense_access.h:53
DenseAccess(const DenseAccess &)=default
FORCE_INLINE constexpr const T * end() const noexcept
Definition dense_access.h:60
DenseAccess()=default
FORCE_INLINE constexpr const T & at(my_size_t idx) const TESSERACT_CONDITIONAL_NOEXCEPT
Definition dense_access.h:49
FORCE_INLINE constexpr T * end() noexcept
Definition dense_access.h:59
FORCE_INLINE constexpr const T & operator[](my_size_t idx) const noexcept
Definition dense_access.h:46
DenseAccess(T initValue)
Definition dense_access.h:32
PaddingPolicy< T, Dims... > PadPolicy
Definition dense_access.h:22
static constexpr my_size_t PhysicalSize
Definition dense_access.h:24
FORCE_INLINE constexpr T & at(my_size_t idx) TESSERACT_CONDITIONAL_NOEXCEPT
Definition dense_access.h:48
FORCE_INLINE constexpr const T * begin() const noexcept
Definition dense_access.h:57
FORCE_INLINE constexpr T * begin() noexcept
Definition dense_access.h:56
FORCE_INLINE constexpr T * data() noexcept
Definition dense_access.h:52
Global configuration for the tesseract tensor library.
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
#define TESSERACT_CONDITIONAL_NOEXCEPT
Definition config.h:56
#define FORCE_INLINE
Hint the compiler to always inline a function.
Definition config.h:26
STL-free memory utilities.
void fill_n_optimized(T *ptr, my_size_t count, const T &value)
Fill a contiguous buffer with a given value.
Definition mem_utils.h:71