FastLED 3.9.15
Loading...
Searching...
No Matches
grid.h
Go to the documentation of this file.
1
2#pragma once
3
4#include "fl/math/geometry.h"
5#include "fl/stl/vector.h"
6#include "fl/stl/int.h"
7#include "fl/stl/span.h"
8#include "fl/stl/noexcept.h"
9
10namespace fl {
11
12template <typename T> class allocator_psram;
13
14template <typename T> class Grid {
15 public:
16 Grid() FL_NOEXCEPT = default;
17
18 Grid(u32 width, u32 height) { reset(width, height); }
19
20 void reset(u32 width, u32 height) {
21 clear();
22 if (width != mWidth || height != mHeight) {
23 mWidth = width;
25 mData.resize(width * height);
26
27 }
29 width, height);
30 }
31
32 void clear() {
33 for (u32 i = 0; i < mWidth * mHeight; ++i) {
34 mData[i] = T();
35 }
36 }
37
38 vec2<T> minMax() const {
39 T minValue = mData[0];
40 T maxValue = mData[0];
41 for (u32 i = 1; i < mWidth * mHeight; ++i) {
42 if (mData[i] < minValue) {
43 minValue = mData[i];
44 }
45 if (mData[i] > maxValue) {
46 maxValue = mData[i];
47 }
48 }
49 // *min = minValue;
50 // *max = maxValue;
51 vec2<T> out(minValue, maxValue);
52 return out;
53 }
54
55 T &at(u32 x, u32 y) { return access(x, y); }
56 const T &at(u32 x, u32 y) const { return access(x, y); }
57
58 T &operator()(u32 x, u32 y) { return at(x, y); }
59 const T &operator()(u32 x, u32 y) const { return at(x, y); }
60
61 u32 width() const { return mWidth; }
62 u32 height() const { return mHeight; }
63
66
67 fl::size size() const { return mData.size(); }
68
69 private:
70 static T &NullValue() {
71 static T gNull;
72 return gNull;
73 }
74 T &access(u32 x, u32 y) {
75 if (x < mWidth && y < mHeight) {
76 return mSlice.at(x, y);
77 } else {
78 return NullValue(); // safe.
79 }
80 }
81 const T &access(u32 x, u32 y) const {
82 if (x < mWidth && y < mHeight) {
83 return mSlice.at(x, y);
84 } else {
85 return NullValue(); // safe.
86 }
87 }
89 u32 mWidth = 0;
90 u32 mHeight = 0;
92};
93
94} // namespace fl
void clear()
Definition grid.h:32
Grid() FL_NOEXCEPT=default
fl::size size() const
Definition grid.h:67
u32 height() const
Definition grid.h:62
const T & operator()(u32 x, u32 y) const
Definition grid.h:59
const T & at(u32 x, u32 y) const
Definition grid.h:56
static T & NullValue()
Definition grid.h:70
fl::vector_psram< T > mData
Definition grid.h:88
fl::span< const T > span() const
Definition grid.h:65
T & operator()(u32 x, u32 y)
Definition grid.h:58
T & at(u32 x, u32 y)
Definition grid.h:55
fl::span< T > span()
Definition grid.h:64
fl::MatrixSlice< T > mSlice
Definition grid.h:91
u32 width() const
Definition grid.h:61
T & access(u32 x, u32 y)
Definition grid.h:74
const T & access(u32 x, u32 y) const
Definition grid.h:81
u32 mHeight
Definition grid.h:90
u32 mWidth
Definition grid.h:89
vec2< T > minMax() const
Definition grid.h:38
void reset(u32 width, u32 height)
Definition grid.h:20
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT