#define DEBUG 0
#define prnt Serial1.print
#define prntln Serial1.println
#define LengthOf(x)(sizeof(x)/sizeof(x[0]))
#define LITERAL(...) "" #__VA_ARGS__
template<typename T>
struct pair {
const char* key;
T val;
}; // typedef pair<int> pair_int;
typedef enum : int { OFF,ON } State;
enum : int { LEN = 3 };
enum : int {
INDX_FIRST,
INDX_SECOND,
INDX_THIRD
};
// First, create typef struct:
typedef struct OBJ {
const char *Name;
int MyInt;
pair<State> States[2];
pair<byte> MyPair;
};
// Create array of structs with data:
OBJ myObj[LEN] = {
{"FIRST", 1, {{"ON ",ON}, {"OFF",OFF}},{"index1", 16}},
{"SECOND", 2, {{"OFF",OFF},{"ON ",ON}}, {"index2", 32}},
{"THIRD", 3, {{"OFF",OFF},{"OFF",OFF}},{"index3", 64}}
};
// Then, create array of pointers!
OBJ *Ptrs[LEN] = {
&(myObj[INDX_FIRST]),
&(myObj[INDX_SECOND]),
&(myObj[INDX_THIRD])
};
// or manually create pointers to each struct:
OBJ *FIRST = &(myObj[INDX_FIRST]);
OBJ *SECOND = &(myObj[INDX_SECOND]);
OBJ *THIRD = &(myObj[INDX_THIRD]);
/////////////////////////////////////////////////////////
void setup() {
Serial1.begin(9600);
// Iterate over pointer array:
///for (int i=0; i<LEN; ++i) prntln(Ptrs[i]->Name);
for (int i=0; i<LEN; ++i) {
OBJ *PTR = Ptrs[i];
prnt(PTR->Name); prntln(":");
prnt(" - MyInt: "); prntln(PTR->MyInt);
prnt(" - MyPair: '"); prnt(PTR->MyPair.key);
prnt("': "); prntln(PTR->MyPair.val);
prntln(" - States:");
prnt(" - [0]: ");
prnt(PTR->States[0].key); prnt(" (");
prnt(PTR->States[0].val); prntln(")");
prnt(" - [1]: ");
prnt(PTR->States[1].key); prnt(" (");
prnt(PTR->States[1].val); prntln(")");
prntln();
}
/*
prnt(FIRST->Name); prntln(":");
prnt(" - MyInt: "); prntln(FIRST->MyInt);
prnt(" - MyPair: "); prnt(FIRST->MyPair.key);
prnt(": "); prntln(FIRST->MyPair.val);
prntln(" - States:");
prnt(" - [0]: ");
prnt(FIRST->States[0].key); prnt(" (");
prnt(FIRST->States[0].val); prntln(")");
prnt(" - [1]: ");
prnt(FIRST->States[1].key); prnt(" (");
prnt(FIRST->States[1].val); prntln(")");
*/
/*
OBJ *FIRST = &(myObj[INDX_FIRST]);
OBJ *SECOND = &(myObj[INDX_SECOND]);
OBJ *THIRD = &(myObj[INDX_THIRD]);
prnt(FIRST->Name); prntln(":");
prnt(" - MyInt: "); prntln(FIRST->MyInt);
prnt(" - MyPair: "); prnt(FIRST->MyPair.key);
prnt(": "); prntln(FIRST->MyPair.val);
prntln(" - States:");
prnt(" - [0]: ");
prnt(FIRST->States[0].key); prnt(" (");
prnt(FIRST->States[0].val); prntln(")");
prnt(" - [1]: ");
prnt(FIRST->States[1].key); prnt(" (");
prnt(FIRST->States[1].val); prntln(")");
*/
//for (;;);
}
void loop() {
delay(1); // this speeds up the simulation
}
///////////////////////////////////////////////////////////////////////