HomeDevCentral

Represent a bits vector

Description

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

Details

Provenance
derecksonAuthored on Apr 9 2022, 07:58
derecksonPushed on Mar 31 2023, 16:05
Reviewer
dereckson
Differential Revision
D2659: Represent a bits vector
Parents
rKOTcf6fce18d2f8: Improve test coverage
Branches
Unknown
Tags
Unknown
Tasks
T1717: Implement new UUID RFC