compact-calendar

Crates.iocompact-calendar
lib.rscompact-calendar
version0.8.2
sourcesrc
created_at2022-08-12 12:13:14.275682
updated_at2024-10-30 22:13:24.956671
descriptionCompact representation of a set of days based on a bit-maps
homepagehttps://github.com/remi-dupre/opening-hours-rs/tree/master/compact-calendar
repositoryhttps://github.com/remi-dupre/opening-hours-rs
max_upload_size
id643964
size27,103
Rémi Dupré (remi-dupre)

documentation

https://docs.rs/compact-calendar

README

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.

Commit count: 199

cargo fmt