9.6. 枚举内置类型
枚举内置类型表示来自一组分配名称的值。
9.6.1. 词汇表示
枚举值的词汇表示是指定的名称字符串。
9.6.2. 规范形式
规范形式是分配的名称字符串。
9.6.3. 限制
一个枚举可以用一个或多个“enum
”(9.6.4节)语句来限制,这个枚举枚举了基类型的值的一个子集。
9.6.4. “enum
“声明
如果类型是“enum
”,则必须存在“enum
”语句,它是“type
”语句的子语句。 它被重复用于指定枚举类型的每个指定名称。 它将作为参数的字符串作为分配的名称。 字符串不能是零长度的,也不能有任何前导或尾随的空白字符(任何具有“White_Space
”属性的Unicode
字符)。 应该避免使用Unicode
控制代码。
该语句后面紧跟着一个包含详细枚举信息的子语句块。
枚举中所有分配的名字必须是唯一的。
当一个现存的枚举类型受到限制时,新类型中的赋值名称集必须是基类型的分配名称集的一个子集。 这个分配的名称的值不能被改变。
9.6.4.1. enum
的子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| description | 7.21.3 | 0..1 |
| if-feature | 7.20.2 | 0..n |
| reference | 7.21.4 | 0..1 |
| status | 7.21.2 | 0..1 |
| value | 9.6.4.2 | 0..1 |
+--------------+---------+-------------+
9.6.4.2. “value
”声明
“value
”语句是可选的,用于将整数值与枚举的分配名称相关联。这个整数值必须在-2147483648
到2147483647
的范围内,它必须在枚举类型中是唯一的。
如果没有指定值,则会自动分配一个值。如果“enum
”子语句是第一个被定义的,赋值为零(0
);否则,所分配的值比当前最高枚举值(即,在父类型“语句”中当前“enum
”子语句之前的隐式或显式最高枚举值)大1
。
请注意,“enum
”语句中存在“if-feature
”语句不会影响自动分配的值。
如果当前最高值等于2147483647
,那么必须为当前最高值之后的“enum
”子语句指定一个枚举值。
当现有的枚举类型受到限制时,“value
”语句必须具有与基类型相同的值或不存在,在这种情况下,该值与基类型中的值相同。
9.6.5 使用示例
leaf myenum {
type enumeration {
enum zero;
enum one;
enum seven {
value 7;
}
}
}
叶子“myenum
”的值为“seven
”的词汇表示是:
<myenum>seven</myenum>
用下面的typedef
:
typedef my-base-enumeration-type {
type enumeration {
enum white {
value 1;
}
enum yellow {
value 2;
}
enum red {
value 3;
}
}
}
以下改进是合法的:
type my-base-enumeration-type {
// legal enum refinement
enum yellow;
enum red {
value 3;
}
}
而下面的改进是非法的:
type my-base-enumeration-type {
// illegal enum refinement
enum yellow {
value 4; // illegal value change
}
enum black; // illegal addition of new name
}
以下示例显示了如何使用“if-feature
”标记“enum
”,这使得该值只在具有相应功能的服务器上合法:
type enumeration {
enum tcp;
enum ssh {
if-feature ssh;
}
enum tls {
if-feature tls;
}
}