com.libsugar.unity.burstulid v0.1.1
BurstUlid
Ulid implemented using burst

Installation
Unity Package by npmjs
Edit your
Packages/manifest.jsonfile like this{ "scopedRegistries": [ { "name": "npm", "url": "https://registry.npmjs.org", "scopes": [ "com.libsugar" ] } ], "dependencies": { "com.libsugar.unity.burstulid": "<version>" } }or use gui in unity editor
configProject Settings -> Package Manager -> Scoped Registeries
then add package in package manager
Tips
This package does not require a dependency in
package.json,
you need to manually ensure ↓ dependencies existUnity.BurstUnity.MathematicsUnity.CollectionsSystem.Runtime.CompilerServices.UnsafeSystem.Text.Json(optional)
This implementation is not fully compliant with the Ulid Standard
- No monotonicity
Memory layout uses little endian
You can convert to big endian using
ToNetFormatorWriteNetFormatBytesvar ulid = BurstUlid.NewUlid(); v128 net_format = ulid.ToNetFormat();Binary layout in memory (if memory is Little-Endian)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_time_low_0123 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 16_bit_uint_time_high_45 | 16_bit_uint_random_01 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_random_2345 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_random_6789 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Binary layout in net (and ulid stand)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_time_high_5432 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 16_bit_uint_time_low_10 | 16_bit_uint_random_98 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_random_7654 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 32_bit_uint_random_3210 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Because some magic is used to bypass the limitation that burst cannot call managed code, so if you want to use it before
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)], you need to callInitStaticmanuallyBurstUlid.InitStatic();Use in general unity life cycle, such as
Awake,Start,Updatecan ignore this promotion
Benchmark
