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 clear();
17 if (width != mWidth || height != mHeight) {
18 mWidth = width;
20 mData.resize(width * height);
21
22 }
24 width, height);
25 }
26
27 void clear() {
28 for (uint32_t i = 0; i < mWidth * mHeight; ++i) {
29 mData[i] = T();
30 }
31 }
32
33 vec2<T> minMax() const {
34 T minValue = mData[0];
35 T maxValue = mData[0];
36 for (uint32_t i = 1; i < mWidth * mHeight; ++i) {
37 if (mData[i] < minValue) {
38 minValue = mData[i];
39 }
40 if (mData[i] > maxValue) {
41 maxValue = mData[i];
42 }
43 }
44 // *min = minValue;
45 // *max = maxValue;
46 vec2<T> out(minValue, maxValue);
47 return out;
48 }
49
50 T &at(uint32_t x, uint32_t y) { return access(x, y); }
51 const T &at(uint32_t x, uint32_t y) const { return access(x, y); }
52
53 T &operator()(uint32_t x, uint32_t y) { return at(x, y); }
54 const T &operator()(uint32_t x, uint32_t y) const { return at(x, y); }
55
56 uint32_t width() const { return mWidth; }
57 uint32_t height() const { return mHeight; }
58
59 T* data() { return mData.data(); }
60 const T* data() const { return mData.data(); }
61
62 size_t size() const { return mData.size(); }
63
64 private:
65 static T &NullValue() {
66 static T gNull;
67 return gNull;
68 }
69 T &access(uint32_t x, uint32_t y) {
70 if (x < mWidth && y < mHeight) {
71 return mSlice.at(x, y);
72 } else {
73 return NullValue(); // safe.
74 }
75 }
76 const T &access(uint32_t x, uint32_t y) const {
77 if (x < mWidth && y < mHeight) {
78 return mSlice.at(x, y);
79 } else {
80 return NullValue(); // safe.
81 }
82 }
84 uint32_t mWidth = 0;
85 uint32_t mHeight = 0;
87};
88
89} // 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:57
Grid()=default
void clear()
Definition grid.h:27
const T * data() const
Definition grid.h:60
T * data()
Definition grid.h:59
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:76
uint32_t mHeight
Definition grid.h:85
T & at(uint32_t x, uint32_t y)
Definition grid.h:50
Grid(uint32_t width, uint32_t height)
Definition grid.h:13
static T & NullValue()
Definition grid.h:65
T & operator()(uint32_t x, uint32_t y)
Definition grid.h:53
size_t size() const
Definition grid.h:62
uint32_t mWidth
Definition grid.h:84
const T & at(uint32_t x, uint32_t y) const
Definition grid.h:51
const T & operator()(uint32_t x, uint32_t y) const
Definition grid.h:54
fl::MatrixSlice< T > mSlice
Definition grid.h:86
uint32_t width() const
Definition grid.h:56
fl::vector< T > mData
Definition grid.h:83
T & access(uint32_t x, uint32_t y)
Definition grid.h:69
vec2< T > minMax() const
Definition grid.h:33
HeapVector< T, Allocator > vector
Definition vector.h:1074
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16