9.7. 位(bits)内置类型

位(bits)内置类型表示一个位集。也就是说,一个比特值是由从0开始的小整数位置号标识的一组标志。每个比特号都有一个分配的名称。

当一个现有的位类型受到限制时,新类型中的一组指定名称必须是基类型的指定名称集合的一个子集。这个指定名称的位位置不能被改变。

9.7.1. 限制

位类型可以用“bits”(9.7.4节)语句来限制。

9.7.2. 词汇表示

位类型的词汇表示是所设置的位的名称的空格分隔列表。 因此零长度的字符串表示没有位被设置的值。

9.7.3. 规范形式

在规范形式中,位值由一个单独的空格字符分隔,并按其位置排序(见第9.7.4.2节)。

9.7.4. “bits”声明

如果类型是“bits”,则必须存在“bit”语句,它是“type”语句的子语句。 它被重复用于指定每个分配的位类型的命名位。 它以一个字符串作为参数,该字符串是该位的分配名称。 紧接着是一个包含详细比特信息的子语句块。 分配的名称遵循与标识符相同的语法规则(请参见第6.2节)。

所有以位类型分配的名称必须是唯一的。

9.7.4.1. bit子语句

+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| description  | 7.21.3  | 0..1        |
| if-feature   | 7.20.2  | 0..n        |
| position     | 9.7.4.2 | 0..1        |
| reference    | 7.21.4  | 0..1        |
| status       | 7.21.2  | 0..1        |
+--------------+---------+-------------+

9.7.4.2. “position”声明

position”语句是可选的,它将一个非负整数值作为参数,该值指定位在假设位域内的位置。位置值必须在04294967295之间,并且在位类型中它必须是唯一的。

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

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

如果当前最高位的位置值等于4294967295,则必须为当前最高位置值之后的“bit”子位置指定一个位置值。

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

9.7.5. 使用示例

鉴于以下typedef和叶:

typedef mybits-type {
  type bits {
    bit disable-nagle {
      position 0;
    }
    bit auto-sense-speed {
      position 1;
    }
    bit ten-mb-only {
      position 2;
    }
  }
}

leaf mybits {
  type mybits-type;
  default "auto-sense-speed";
}

这个叶子的词法表示的值为disable-nagle10-mb-only集合将是:

<mybits>disable-nagle ten-mb-only</mybits>

下面的例子显示了这种类型的合法改进:

type mybits-type {
  // legal bit refinement
  bit disable-nagle {
    position 0;
  }
  bit auto-sense-speed {
    position 1;
  }
}

而下面的改进是非法的:

type mybits-type {
  // illegal bit refinement
  bit disable-nagle {
    position 2; // illegal position change
  }
  bit hundred-mb-only; // illegal addition of new name
}

results matching ""

    No results matching ""