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/slice.h"
5#include "fl/vector.h"
6
7namespace fl {
8
9template <typename T> class Grid {
10 public:
11 Grid() = default;
12
13 Grid(uint32_t width, uint32_t height) { reset(width, height); }
14
15 void reset(uint32_t width, uint32_t height) {
16 if (width != mWidth || height != mHeight) {
17 mWidth = width;
19 // Only re-allocate if the size is now bigger.
20 mData.reserve(width * height);
21 // Fill with default objects.
22 while (mData.size() < width * height) {
23 mData.push_back(T());
24 }
26 width - 1, height - 1);
27 }
28 clear();
29 }
30
31 void clear() {
32 for (uint32_t i = 0; i < mWidth * mHeight; ++i) {
33 mData[i] = T();
34 }
35 }
36
37 vec2<T> minMax() const {
38 T minValue = mData[0];
39 T maxValue = mData[0];
40 for (uint32_t i = 1; i < mWidth * mHeight; ++i) {
41 if (mData[i] < minValue) {
42 minValue = mData[i];
43 }
44 if (mData[i] > maxValue) {
45 maxValue = mData[i];
46 }
47 }
48 // *min = minValue;
49 // *max = maxValue;
50 vec2<T> out(minValue, maxValue);
51 return out;
52 }
53
54 T &at(uint32_t x, uint32_t y) { return access(x, y); }
55 const T &at(uint32_t x, uint32_t y) const { return access(x, y); }
56
57 T &operator()(uint32_t x, uint32_t y) { return at(x, y); }
58 const T &operator()(uint32_t x, uint32_t y) const { return at(x, y); }
59
60 uint32_t width() const { return mWidth; }
61 uint32_t height() const { return mHeight; }
62
63 private:
64 static T &NullValue() {
65 static T gNull;
66 return gNull;
67 }
68 T &access(uint32_t x, uint32_t y) {
69 if (x < mWidth && y < mHeight) {
70 return mSlice.at(x, y);
71 } else {
72 return NullValue(); // safe.
73 }
74 }
75 const T &access(uint32_t x, uint32_t y) const {
76 if (x < mWidth && y < mHeight) {
77 return mSlice.at(x, y);
78 } else {
79 return NullValue(); // safe.
80 }
81 }
83 uint32_t mWidth = 0;
84 uint32_t mHeight = 0;
86};
87
88} // namespace fl
uint32_t x[NUM_LAYERS]
Definition Fire2023.ino:82
uint32_t y[NUM_LAYERS]
Definition Fire2023.ino:83
uint32_t height() const
Definition grid.h:61
Grid()=default
void clear()
Definition grid.h:31
void reset(uint32_t width, uint32_t height)
Definition grid.h:15
const T & access(uint32_t x, uint32_t y) const
Definition grid.h:75
uint32_t mHeight
Definition grid.h:84
T & at(uint32_t x, uint32_t y)
Definition grid.h:54
Grid(uint32_t width, uint32_t height)
Definition grid.h:13
static T & NullValue()
Definition grid.h:64
T & operator()(uint32_t x, uint32_t y)
Definition grid.h:57
uint32_t mWidth
Definition grid.h:83
const T & at(uint32_t x, uint32_t y) const
Definition grid.h:55
const T & operator()(uint32_t x, uint32_t y) const
Definition grid.h:58
fl::MatrixSlice< T > mSlice
Definition grid.h:85
uint32_t width() const
Definition grid.h:60
fl::vector< T > mData
Definition grid.h:82
T & access(uint32_t x, uint32_t y)
Definition grid.h:68
vec2< T > minMax() const
Definition grid.h:37
HeapVector< T > vector
Definition vector.h:1028
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16