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/span.h"
5#include "fl/vector.h"
6#include "fl/allocator.h"
7
8namespace fl {
9
10
11template <typename T> class Grid {
12 public:
13 Grid() = default;
14
15 Grid(u32 width, u32 height) { reset(width, height); }
16
17 void reset(u32 width, u32 height) {
18 clear();
19 if (width != mWidth || height != mHeight) {
20 mWidth = width;
22 mData.resize(width * height);
23
24 }
26 width, height);
27 }
28
29
30 void clear() {
31 for (u32 i = 0; i < mWidth * mHeight; ++i) {
32 mData[i] = T();
33 }
34 }
35
36 vec2<T> minMax() const {
37 T minValue = mData[0];
38 T maxValue = mData[0];
39 for (u32 i = 1; i < mWidth * mHeight; ++i) {
40 if (mData[i] < minValue) {
41 minValue = mData[i];
42 }
43 if (mData[i] > maxValue) {
44 maxValue = mData[i];
45 }
46 }
47 // *min = minValue;
48 // *max = maxValue;
49 vec2<T> out(minValue, maxValue);
50 return out;
51 }
52
53 T &at(u32 x, u32 y) { return access(x, y); }
54 const T &at(u32 x, u32 y) const { return access(x, y); }
55
56 T &operator()(u32 x, u32 y) { return at(x, y); }
57 const T &operator()(u32 x, u32 y) const { return at(x, y); }
58
59 u32 width() const { return mWidth; }
60 u32 height() const { return mHeight; }
61
62 T* data() { return mData.data(); }
63 const T* data() const { return mData.data(); }
64
65 fl::size size() const { return mData.size(); }
66
67 private:
68 static T &NullValue() {
69 static T gNull;
70 return gNull;
71 }
72 T &access(u32 x, u32 y) {
73 if (x < mWidth && y < mHeight) {
74 return mSlice.at(x, y);
75 } else {
76 return NullValue(); // safe.
77 }
78 }
79 const T &access(u32 x, u32 y) const {
80 if (x < mWidth && y < mHeight) {
81 return mSlice.at(x, y);
82 } else {
83 return NullValue(); // safe.
84 }
85 }
87 u32 mWidth = 0;
88 u32 mHeight = 0;
90};
91
92} // namespace fl
int y
Definition simple.h:93
int x
Definition simple.h:92
Grid()=default
void clear()
Definition grid.h:30
const T * data() const
Definition grid.h:63
fl::size size() const
Definition grid.h:65
u32 height() const
Definition grid.h:60
const T & operator()(u32 x, u32 y) const
Definition grid.h:57
T * data()
Definition grid.h:62
fl::vector< T, fl::allocator_psram< T > > mData
Definition grid.h:86
const T & at(u32 x, u32 y) const
Definition grid.h:54
static T & NullValue()
Definition grid.h:68
T & operator()(u32 x, u32 y)
Definition grid.h:56
T & at(u32 x, u32 y)
Definition grid.h:53
fl::MatrixSlice< T > mSlice
Definition grid.h:89
u32 width() const
Definition grid.h:59
T & access(u32 x, u32 y)
Definition grid.h:72
const T & access(u32 x, u32 y) const
Definition grid.h:79
u32 mHeight
Definition grid.h:88
u32 mWidth
Definition grid.h:87
Grid(u32 width, u32 height)
Definition grid.h:15
vec2< T > minMax() const
Definition grid.h:36
void reset(u32 width, u32 height)
Definition grid.h:17
HeapVector< T, Allocator > vector
Definition vector.h:1214
IMPORTANT!
Definition crgb.h:20