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

如果没有指定值,则会自动分配一个值。如果“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;
  }
}

results matching ""

    No results matching ""