Integers
- Variable-bit-sized, e.g. int2, int4, int8, etc.
- Variable sized with delta (for values with small dynamic range)
- Jeff Dean / Daniel Lemire integer encoding (https://arxiv.org/abs/1709.08990)
Floats
- Store as integer with a divisor (BGEN!)
Call
- 2-bit diploid unphased call
String
- Length + pointer (allows O(1) slicing)
- Factor type (store as int, look up in array of possible values)
Struct/Tuple
- Struct by reference
- InsertFieldsPStruct
- SelectFieldsPStruct
Array
- Fixed-length
Locus
Dict
- Sorted
- Hash
Set
- Sorted
- Hash
misc
- Array[Struct] => Struct{arrays…} !!!
- union types to support if, makearray, etc
- Lazily-decoded values (e.g. BGEN genotypes)
- bit sets
Feel free to add!