On Fri, 2 Sep 2022 00:04:17 GMT, John R Rose <jr...@openjdk.org> wrote:

>> Refactor code from inside of CompressedStream into its own unit.
>> 
>> This code is likely to be used in future refactorings, such as JDK-8292818 
>> (replace 96-bit representation for field metadata with variable-sized 
>> streams).
>> 
>> Add gtests.
>
> John R Rose has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains two additional 
> commits since the last revision:
> 
>  - Merge branch 'master' of https://git.openjdk.org/jdk into compressed-stream
>  - 8292758: put support for UNSIGNED5 format into its own header file

The new header file presents the encoding algorithm by means of templates.
The template arguments in general are:
 - `ARY` - a logical base address for reads and writes of bytes
 - `OFF` - an integral type (of any size or signed-ness) providing an offset to 
`ARY`
 - `GET` and `SET` - function-like arguments (e.g., lambdas) which get or set 
bytes from an address logically of the form `a[i]` shaped like `ARY[OFF]`
 - `GFN` a lambda used when the application requires on-the fly resizing of an 
output buffer (of type `ARY`)

Defaults are set in such a way that any C++ types that natively support `a[i]` 
can be fully inferred, including the get/set behaviors.

In addition, there are small "gadgets" for reading a series of ints from a 
buffer, writing a series to a buffer, and sizing a series (which is faster than 
writing or reading).  These are not yet used.  However, prototyping of further 
use cases for this compression (particularly, `FieldInfo`) makes it clear that 
these are repeated tasks that "canned" templates will help with.

-------------

PR: https://git.openjdk.org/jdk/pull/10067

Reply via email to