FastLED 3.9.15
Loading...
Searching...
No Matches
initializer_list.h
Go to the documentation of this file.
1// allow-include-after-namespace
2
3#pragma once
4
5
6#include "fl/namespace.h"
7
8// Define if initializer_list is available
9// Check for C++11 and if std::initializer_list exists
10#if defined(__AVR__)
11// Emulated initializer_list for AVR platforms
12namespace fl {
13 template<typename T>
14 class initializer_list {
15 private:
16 const T* mBegin;
17 fl::size mSize;
18
19 // Private constructor used by compiler
20 constexpr initializer_list(const T* first, fl::size size)
21 : mBegin(first), mSize(size) {}
22
23 public:
24 using value_type = T;
25 using reference = const T&;
26 using const_reference = const T&;
27 using size_type = fl::size;
28 using iterator = const T*;
29 using const_iterator = const T*;
30
31 // Default constructor
32 constexpr initializer_list() : mBegin(nullptr), mSize(0) {}
33
34 // Size and capacity
35 constexpr fl::size size() const { return mSize; }
36 constexpr bool empty() const { return mSize == 0; }
37
38 // Iterators
39 constexpr const_iterator begin() const { return mBegin; }
40 constexpr const_iterator end() const { return mBegin + mSize; }
41
42 // Allow compiler access to private constructor
43 template<typename U> friend class initializer_list;
44 };
45
46 // Helper functions to match std::initializer_list interface
47 template<typename T>
48 constexpr const T* begin(initializer_list<T> il) {
49 return il.begin();
50 }
51
52 template<typename T>
53 constexpr const T* end(initializer_list<T> il) {
54 return il.end();
55 }
56}
57#else
58#include <initializer_list>
59namespace fl {
60 using std::initializer_list;
61}
62#endif
Implements the FastLED namespace macros.
constexpr T * begin(T(&array)[N]) noexcept
Definition range_access.h:9
constexpr T * end(T(&array)[N]) noexcept
IMPORTANT!
Definition crgb.h:20