#calendar #openstreetmap #compact #parser #python3 #store

compact-calendar

Compact representation of a set of days based on a bit-maps

6 releases

0.6.4 Aug 12, 2022
0.6.3 Aug 12, 2022
0.5.6 Aug 12, 2022

#537 in Data structures

29 downloads per month
Used in opening-hours

MIT/Apache

26KB
258 lines

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.

Dependencies

~1MB
~16K SLoC