Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
is in fact a range of size 1. This single-value range is supported without
repeating the start and end values with the value = string declaration.
is in fact a range of size 1. This single-value range is supported without
repeating the start and end values with the value = string declaration.
-enum name <integer_type> {
+enum name : integer_type {
somestring = start_value1 ... end_value1,
"other string" = start_value2 ... end_value2,
yet_another_string, /* will be assigned to end_value2 + 1 */
somestring = start_value1 ... end_value1,
"other string" = start_value2 ... end_value2,
yet_another_string, /* will be assigned to end_value2 + 1 */
If the values are omitted, the enumeration starts at 0 and increment of 1 for
each entry:
If the values are omitted, the enumeration starts at 0 and increment of 1 for
each entry:
-enum name <unsigned int> {
+enum name : unsigned int {
A nameless enumeration can be declared as a field type or as part of a typedef:
A nameless enumeration can be declared as a field type or as part of a typedef:
- enum <integer_type> { sel1, sel2, sel3, ... } tag_field;
+ enum : integer_type { sel1, sel2, sel3, ... } tag_field;
...
variant name <tag_field> v;
}
...
variant name <tag_field> v;
}
- enum <integer_type> { sel1, sel2, sel3, ... } tag_field;
+ enum : integer_type { sel1, sel2, sel3, ... } tag_field;
...
variant <tag_field> {
field_type sel1;
...
variant <tag_field> {
field_type sel1;
- enum <uint2_t> { a, b, c } choice;
+ enum : uint2_t { a, b, c } choice;
variant example <choice> v[unsigned int];
}
Example of an unnamed variant:
struct {
variant example <choice> v[unsigned int];
}
Example of an unnamed variant:
struct {
- enum <uint2_t> { a, b, c, d } choice;
+ enum : uint2_t { a, b, c, d } choice;
/* Unrelated fields can be added between the variant and its tag */
int32_t somevalue;
variant <choice> {
/* Unrelated fields can be added between the variant and its tag */
int32_t somevalue;
variant <choice> {
Example of an unnamed variant within an array:
struct {
Example of an unnamed variant within an array:
struct {
- enum <uint2_t> { a, b, c } choice;
+ enum : uint2_t { a, b, c } choice;
variant <choice> {
uint32_t a;
uint64_t b;
variant <choice> {
uint32_t a;
uint64_t b;
the lexical scope of the type definition.
struct {
the lexical scope of the type definition.
struct {
- enum <uint2_t> { a, b, c, d } x;
+ enum : uint2_t { a, b, c, d } x;
typedef variant <x> { /*
* "x" refers to the preceding "x" enumeration in the
typedef variant <x> { /*
* "x" refers to the preceding "x" enumeration in the
} example_variant;
struct {
} example_variant;
struct {
- enum <int> { x, y, z } x; /* This enumeration is not used by "v". */
+ enum : int { x, y, z } x; /* This enumeration is not used by "v". */
- * "v" uses the "enum <uint2_t> { a, b, c, d }"
+ * "v" uses the "enum : uint2_t { a, b, c, d }"
* id: range: 0 - 30.
* id 31 is reserved to indicate an extended header.
*/
* id: range: 0 - 30.
* id 31 is reserved to indicate an extended header.
*/
- enum <uint5_t> { compact = 0 ... 30, extended = 31 } id;
+ enum : uint5_t { compact = 0 ... 30, extended = 31 } id;
variant <id> {
struct {
uint27_t timestamp;
variant <id> {
struct {
uint27_t timestamp;
* id: range: 0 - 65534.
* id 65535 is reserved to indicate an extended header.
*/
* id: range: 0 - 65534.
* id 65535 is reserved to indicate an extended header.
*/
- enum <uint16_t> { compact = 0 ... 65534, extended = 65535 } id;
+ enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id;
variant <id> {
struct {
uint32_t timestamp;
variant <id> {
struct {
uint32_t timestamp;
the newly defined type name (for typedef), or the field name (for
declarations located within structure and variants). Array and sequence,
declared with square brackets ("[" "]"), are part of the declarator,
the newly defined type name (for typedef), or the field name (for
declarations located within structure and variants). Array and sequence,
declared with square brackets ("[" "]"), are part of the declarator,
-similarly to C99. The enumeration type specifier and variant tag name
-(both specified with "<" ">") are part of the type specifier.
+similarly to C99. The enumeration base type is specified by
+": base_type", which is part of the type specifier. The variant tag
+name, specified between "<" ">", is also part of the type specifier.
A definition associates a type to a location in the event structure
hierarchy (see Section 6). This association is denoted by ":=", as shown
A definition associates a type to a location in the event structure
hierarchy (see Section 6). This association is denoted by ":=", as shown
-enum name <integer_type> {
+enum name : integer_type {
enum identifier-opt { enumerator-list }
enum identifier-opt { enumerator-list , }
enum identifier
enum identifier-opt { enumerator-list }
enum identifier-opt { enumerator-list , }
enum identifier
- enum identifier-opt < declaration-specifiers > { enumerator-list }
- enum identifier-opt < declaration-specifiers > { enumerator-list , }
- enum identifier < declaration-specifiers >
+ enum identifier-opt : declaration-specifiers { enumerator-list }
+ enum identifier-opt : declaration-specifiers { enumerator-list , }
enumerator-list:
enumerator
enumerator-list:
enumerator