#打包 #数组 #结构 #别称 #集合 #稀疏 #迭代

packed_array

打包数组,即编译时已知大小的稀疏集合结构

2个不稳定版本

0.2.0 2022年6月15日
0.1.2 2022年6月14日
0.1.1 2022年6月12日
0.1.0 2022年6月12日

#2281数据结构

MIT 许可证

8KB
114

打包数组,即稀疏集合

一种数据结构,通过保持所有数据整齐打包以实现缓存友好的迭代。类似的在完整的ECS游戏引擎EnTT中使用

元素的顺序不保证保持不变,因此您应该保存追加元素的索引以供将来访问

使用方法

    #[test]
    fn creation() {
        let a = PackedArray::<u32, 10>::new();
        assert_eq!(a.len(), 0);
    }

    #[test]
    fn append_remove() {
        let mut a = PackedArray::<i16, 15>::new();
        let i1 = a.append(90);
        let i2 = a.append(18);
        let i3 = a.append(-80);
        assert_eq!(a.len(), 3);
        assert_eq!(a[i1], 90);
        assert_eq!(a[i2], 18);
        assert_eq!(a[i3], -80);

        a.remove(i3);
        assert_eq!(a.len(), 2);
        assert_eq!(a[i1], 90);
        assert_eq!(a[i2], 18);

        a.remove(i1);
        assert_eq!(a.len(), 1);
        assert_eq!(a[i2], 18);
    }

    #[test]
    fn references() {
        let mut a = PackedArray::<i16, 15>::new();
        let i1 = a.append(90);
        let i2 = a.append(18);

        let number = &mut a[i2];
        *number = 80;
        assert_eq!(a[i2], 80);
        assert_eq!(a[i1], 90);
    }

    #[test]
    fn iteration() {
        let mut a = PackedArray::<i16, 15>::new();
        a.append(90);
        a.append(18);

        let mut i = 0;
        for item in a.iter() {
            assert_eq!(*item, a[i]);
            i += 1;
        }
    }

    #[test]
    fn iteration_mut() {
        let mut a = PackedArray::<i16, 15>::new();
        let i1 = a.append(90);
        let i2 = a.append(18);

        for item in a.iter_mut() {
            *item += 1;
        }
        assert_eq!(a[i1], 91);
        assert_eq!(a[i2], 19);
    }

依赖项

~22KB