FastLED 3.9.15
Loading...
Searching...
No Matches

◆ init()

void fl::PixelIteratorAny::init ( PixelController< RGB > & controller,
EOrder newOrder )
inline

Initialize the adapter with color order conversion.

Definition at line 65 of file pixel_iterator_any.h.

65 {
66 // Step 1: Create the appropriate PixelController variant based on color order
67 switch (newOrder) {
68 case RGB:
70 break;
71 case RBG:
72 mAnyController = PixelController<RBG>(controller);
73 break;
74 case GRB:
75 mAnyController = PixelController<GRB>(controller);
76 break;
77 case GBR:
78 mAnyController = PixelController<GBR>(controller);
79 break;
80 case BRG:
81 mAnyController = PixelController<BRG>(controller);
82 break;
83 case BGR:
84 mAnyController = PixelController<BGR>(controller);
85 break;
86 }
87
88 // Step 2: Use visitor pattern to construct PixelIterator with correct pointer type
89 // Note: fl::Optional::emplace takes a constructed object, not constructor args
90 struct PixelIteratorInitVisitor {
91 PixelIteratorInitVisitor(Rgbw rgbw, Rgbww rgbww)
92 : rgbw(rgbw), rgbww(rgbww) {}
93 fl::Optional<PixelIterator>* pixelIteratorPtr;
94 Rgbw rgbw;
95 Rgbww rgbww;
96
97 // Need concrete overloads for each type in the variant
98 void accept(PixelController<RGB>& controller) {
99 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
100 }
101 void accept(PixelController<RBG>& controller) {
102 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
103 }
104 void accept(PixelController<GRB>& controller) {
105 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
106 }
107 void accept(PixelController<GBR>& controller) {
108 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
109 }
110 void accept(PixelController<BRG>& controller) {
111 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
112 }
113 void accept(PixelController<BGR>& controller) {
114 pixelIteratorPtr->emplace(PixelIterator(&controller, rgbw, rgbww));
115 }
116 };
117
118 PixelIteratorInitVisitor visitor(mRgbw, mRgbww);
119 visitor.pixelIteratorPtr = &mPixelIterator;
120 mAnyController.visit(visitor);
121 }
CLEDController * controller
Rgbw rgbw
void emplace(T &&value) FL_NOEXCEPT
Emplace with rvalue reference.
Definition optional.h:33
fl::variant< PixelController< RGB >, PixelController< RBG >, PixelController< GRB >, PixelController< GBR >, PixelController< BRG >, PixelController< BGR > > mAnyController
fl::Optional< PixelIterator > mPixelIterator
@ RBG
Red, Blue, Green (0021)
Definition eorder.h:15
@ BGR
Blue, Green, Red (0210)
Definition eorder.h:19
@ BRG
Blue, Red, Green (0201)
Definition eorder.h:18
@ GRB
Green, Red, Blue (0102)
Definition eorder.h:16
@ RGB
Red, Green, Blue (0012)
Definition eorder.h:14
@ GBR
Green, Blue, Red (0120)
Definition eorder.h:17
fl::PixelIterator PixelIterator

References fl::BGR, fl::BRG, controller, fl::Optional< T >::emplace(), fl::GBR, fl::GRB, mAnyController, mPixelIterator, mRgbw, mRgbww, fl::RBG, fl::RGB, and rgbw.

Referenced by PixelIteratorAny(), and PixelIteratorAny().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: