Unity Job System详解(5)——NativeHashSet/Map源码分析

不再贴完整源码,只贴关键部分源码

需要先看懂C# 字典原理

NativeHashSet的定义为:

public unsafe struct NativeHashSet<T>: INativeDisposable, IEnumerable<T> where T : unmanaged, IEquatable<T>

NativeHashMap的定义为:

public unsafe struct NativeHashMap<TKey, TValue>: INativeDisposable, IEnumerable<KVPair<TKey, TValue>>  where TKey : unmanaged, IEquatable<TKey>  where TValue : unmanaged

比较特殊的是T要求实现IEquatable,如果是int、float等数值类型既然就有,如果是自定义结构体,最好也在自己实现下

两者的核心都在HashMapHelper中,数据在HashMapHelper<T>* m_Data,内存分配同样调用Memory.Unmanaged.Allocate,释放调用Memory.Unmanaged.Free,有依赖释放时会自动创建NativeHashMapDisposeJob,逻辑与NativeList完全一致

与UnsafeList不同的是,这里数据类型不同,没用Block,直接调用的Memory.Unmanaged.Allocate

添加、删除元素,扩容等基本和C#字典相同,使用方式基本相同,不再赘述。

这里不同的是,将value、key、next、bucket按顺序合并在一个数组中了,实现在Init函数中

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值