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的子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | description | 7.21.3 | 0..1 |
  5. | if-feature | 7.20.2 | 0..n |
  6. | reference | 7.21.4 | 0..1 |
  7. | status | 7.21.2 | 0..1 |
  8. | value | 9.6.4.2 | 0..1 |
  9. +--------------+---------+-------------+

9.6.4.2. “value”声明

value”语句是可选的,用于将整数值与枚举的分配名称相关联。这个整数值必须在-21474836482147483647的范围内,它必须在枚举类型中是唯一的。

如果没有指定值,则会自动分配一个值。如果“enum”子语句是第一个被定义的,赋值为零(0);否则,所分配的值比当前最高枚举值(即,在父类型“语句”中当前“enum”子语句之前的隐式或显式最高枚举值)大1

请注意,“enum”语句中存在“if-feature”语句不会影响自动分配的值。

如果当前最高值等于2147483647,那么必须为当前最高值之后的“enum”子语句指定一个枚举值。

当现有的枚举类型受到限制时,“value”语句必须具有与基类型相同的值或不存在,在这种情况下,该值与基类型中的值相同。

9.6.5 使用示例

  1. leaf myenum {
  2. type enumeration {
  3. enum zero;
  4. enum one;
  5. enum seven {
  6. value 7;
  7. }
  8. }
  9. }

叶子“myenum”的值为“seven”的词汇表示是:

  1. <myenum>seven</myenum>

用下面的typedef

  1. typedef my-base-enumeration-type {
  2. type enumeration {
  3. enum white {
  4. value 1;
  5. }
  6. enum yellow {
  7. value 2;
  8. }
  9. enum red {
  10. value 3;
  11. }
  12. }
  13. }

以下改进是合法的:

  1. type my-base-enumeration-type {
  2. // legal enum refinement
  3. enum yellow;
  4. enum red {
  5. value 3;
  6. }
  7. }

而下面的改进是非法的:

  1. type my-base-enumeration-type {
  2. // illegal enum refinement
  3. enum yellow {
  4. value 4; // illegal value change
  5. }
  6. enum black; // illegal addition of new name
  7. }

以下示例显示了如何使用“if-feature”标记“enum”,这使得该值只在具有相应功能的服务器上合法:

  1. type enumeration {
  2. enum tcp;
  3. enum ssh {
  4. if-feature ssh;
  5. }
  6. enum tls {
  7. if-feature tls;
  8. }
  9. }