Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ff3dd5b

Browse files
feat(string): Add initializer list constructor (#12109)
* feat(string): Add initializer list constructor * fix(mac): Add initializer list constructor
1 parent e368295 commit ff3dd5b

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

‎cores/esp32/MacAddress.cpp‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ MacAddress::MacAddress(const String &macstr) {
3232
fromString(macstr.c_str());
3333
}
3434

35+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
36+
MacAddress::MacAddress(std::initializer_list<uint8_t> list) {
37+
size_t size = list.size();
38+
memset(_mac.bytes, 0, sizeof(_mac.bytes));
39+
if (size == 6) {
40+
_type = MAC6;
41+
} else if (size == 8) {
42+
_type = MAC8;
43+
} else {
44+
// Default to MAC6 and keep the rest of the bytes as 0
45+
_type = MAC6;
46+
return;
47+
}
48+
49+
memcpy(_mac.bytes, list.begin(), size);
50+
}
51+
#endif
52+
3553
MacAddress::MacAddress(uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5, uint8_t b6) {
3654
_type = MAC6;
3755
memset(_mac.bytes, 0, sizeof(_mac.bytes));

‎cores/esp32/MacAddress.h‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
#include <stdint.h>
2424
#include <WString.h>
2525
#include <Printable.h>
26+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
27+
#include <initializer_list>
28+
#endif
2629

2730
enum MACType {
2831
MAC6,
@@ -56,6 +59,12 @@ class MacAddress : public Printable {
5659
MacAddress(const char *macstr);
5760
MacAddress(const String &macstr);
5861

62+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
63+
// Initializer list constructor for {0xAA, 0xBB, ...} syntax
64+
// This has higher priority than String conversion, preventing ambiguity
65+
MacAddress(std::initializer_list<uint8_t> list);
66+
#endif
67+
5968
virtual ~MacAddress() {}
6069

6170
bool fromString(const char *buf);

‎cores/esp32/WString.cpp‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ String::String(StringSumHelper &&rval) {
5959
init();
6060
move(rval);
6161
}
62+
63+
String::String(std::initializer_list<char> list) {
64+
init();
65+
if (list.size() > 0) {
66+
copy(list.begin(), list.size());
67+
}
68+
}
6269
#endif
6370

6471
String::String(char c) {

‎cores/esp32/WString.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
#include <stdint.h>
3030
#include <string.h>
3131
#include <ctype.h>
32+
#ifdef __GXX_EXPERIMENTAL_CXX0X__
33+
#include <initializer_list>
34+
#endif
3235

3336
// A pure abstract class forward used as a means to proide a unique pointer type
3437
// but really is never defined.
@@ -58,6 +61,7 @@ class String {
5861
String(const char *cstr, unsigned int length);
5962
#ifdef __GXX_EXPERIMENTAL_CXX0X__
6063
String(const uint8_t *cstr, unsigned int length) : String(reinterpret_cast<const char *>(cstr), length) {}
64+
String(std::initializer_list<char> list);
6165
#endif
6266
String(const String &str);
6367
String(const __FlashStringHelper *str) : String(reinterpret_cast<const char *>(str)) {}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /