com.libsugar.unity.burstulid
v0.1.0# BurstUlid
Ulid implemented using burst
Installation
Unity Package by npmjs
Edit your
Packages/manifest.json
file 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.Burst
Unity.Mathematics
Unity.Collections
System.Runtime.CompilerServices.Unsafe
System.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
ToNetFormat
orWriteNetFormatBytes
var 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 callInitStatic
manuallyBurstUlid.InitStatic();
Use in general unity life cycle, such as
Awake
,Start
,Update
can ignore this promotion