mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
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>
This commit is contained in:
parent
e343984fc5
commit
49e2ae65e8
2 changed files with 36 additions and 27 deletions
|
@ -55,6 +55,10 @@ struct cell {
|
|||
struct cell *_car;
|
||||
struct cell *_cdr;
|
||||
} _cons;
|
||||
struct {
|
||||
size_t _length;
|
||||
pointer _elements[0];
|
||||
} _vector;
|
||||
struct {
|
||||
char *_data;
|
||||
const foreign_object_vtable *_vtable;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue