typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset;
整数集合的实现结构如上,主要用来用作集合对象的实现,其中encoding type包含INT16,INT32,INT64三种选择,所有的整数都在contents[]里按照从小到大有序存储。
整数集合有一个升级的概念,主要目的是为了保证数组里的每个整数的类型一致,比如加入contents[]里有三个整数1,2,3,都是INT16类型,此时进来一个-1212121212,那么整个contents[]里的整数都要升级为INT32类型。一旦升级,不支持降级,即使-1212121212被删除,剩余的三个整数也会保持INT32类型。
升级的优点:
1.
2.第二个优点是建立在上面的灵活性优点的基础上的。
其实把所有低类型都扩充为高类型,应该是不节约内存才对,不过这样做可以保证优点1,即可以把所有不同类型的值放在同一个结构里,保证了灵活性的前提下,设计出“升级”的操作是节约内存的,最起码避免了一开始就全都用最大类型INT64。