HomeDevCentral

Represent a bits vector
889ab94f932eUnpublished

Unpublished Commit · Learn More

Not On Permanent Ref: This commit is not an ancestor of any permanent ref.
This commit has been deleted in the repository: it is no longer reachable from any branch, tag, or ref.

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 Jul 1 2023, 20:39
derecksonPushed on Jun 22 2023, 22:00
Parents
rKERUALDcf6fce18d2f8: Improve test coverage
Branches
Unknown
Tags
Unknown

Event Timeline