降级

整数集合不支持降级操作, 一旦对数组进行了升级, 编码就会一直保持升级后的状态。

举个例子, 对于图 6-11 所示的整数集合来说, 即使我们将集合里唯一一个真正需要使用 int64_t 类型来保存的元素 4294967295 删除了, 整数集合的编码仍然会维持 INTSET_ENC_INT64 , 底层数组也仍然会是 int64_t 类型的, 如图 6-12 所示。

digraph {

    label = "\n 图 6-11    数组编码为 INTSET_ENC_INT64 的整数集合";

    rankdir = LR;

    node [shape = record];

    intset [label = " intset | encoding \n INTSET_ENC_INT64 | length \n 5 | <contents> contents "];

    contents [label = " { 5 | 10 | 12 | 65535 | 4294967295 } "];

    intset:contents -> contents;

}
digraph {

    label = "\n 图 6-12    删除 4294967295 之后的整数集合";

    rankdir = LR;

    node [shape = record];

    intset [label = " intset | encoding \n INTSET_ENC_INT64 | length \n 4 | <contents> contents "];

    contents [label = " { 5 | 10 | 12 | 65535 } "];

    intset:contents -> contents;

}