gpgscm: Use a compact vector representation.

Authored by justus on Jan 30 2017, 3:51 PM.

Description

gpgscm: Use a compact vector representation.

* tests/gpgscm/scheme-private.h (struct cell): Add a compact vector
representation.
* tests/gpgscm/scheme.c (vector_length): Use new representation.
(vector_size): New macro.
(get_vector_object): Use the new representation.
(fill_vector): Likewise.
(vector_elem): Likewise.
(set_vector_elem): Likewise.
(mark): Likewise.
(gc): Likewise.  Be careful not to confuse immediate values for type
flags.
(finalize_cell): Vectors now require finalization.

Previously, vectors were represented using consecutive cons cells,
wasting one word per cell for the type information. Fix that by using
a flat array.

Previously, a vector of size N required 1 + (n + 1) / 2 cells. Now it
uses 1 + (n - 1 + 2) / 3 cells.

  • Signed-off-by: Justus Winter <justus@g10code.com>

Details

Committed
justusJan 30 2017, 6:21 PM
Parents
rEe1dc204ac465: gpgscm: Provide framework for immediate values.
Branches
Unknown
Tags
Unknown