Represent a bits vector
Summary:
\Keruald\OmniTools\Collections\BitsVector allows to represent vector of bits,
and manipulate them with expressive oriented-object methods.
That allows to clearly express the bits manipulation without any arcane notation
like uuid->time_hi_and_version |= (v << 12) in C.
Context
Traditionally, Perl offers a pack() function to encode information
into a binary string, and read the string as ASCII. That function
has been ported into PHP.
Yet, this representation is especially useful when we manipulate bytes,
and some data structures like cut bits blocks in other boundaries than
bytes. For example UUID use 60 bits timestamp, 2 bits variant and 4 bits
version fields. That requires to combine two fields in one byte.
Ref. T1717
Test Plan: Unit tests provided, with full coverage for BaseVector, BitsVector, Vector.
Reviewers: dereckson
Reviewed By: dereckson
Maniphest Tasks: T1717
Differential Revision: https://devcentral.nasqueron.org/D2659