Crate compact_calendar
source ·Expand description
Compact representation for a calendar
This modules basically builds a data-structure for a set of days based on bit-maps. This is built to store a collection of regional holidays for the opening-hours crate.
Data layout
Here is how serialized data is represented:
start size year 1 year 2 ...
┌──────┬──────┬───────────────┬───────────────┬────
│ 8B │ 8B │ 8B * 12 = 96B │ 8B * 12 = 96B │ ...
└──────┴──────┴───────────────┴───────────────┴────
Each year is just an array of 12 u32
where the least significant bits each
represent a day.
While a bitset might not be the most efficient way to store a collection of dates for sparse data, this approached proved to be very compact when combined with a Zlib encoder. This methods allowed to store all holidays from 2000 to 2100 as described by workalendar in only 60kb of data.
Structs
- A compact representation of included days in a range of years, using u32-based bit arrays.
- A compact representation of included days for a month, using a u32-based bit array.
- A compact representation of included days for a year, using a collection of u32-based bit array.