mirror of
https://github.com/git/git.git
synced 2026-02-27 18:29:43 +00:00
Prior to commit 6a26019c81 (xdiff: split xrecord_t.ha into line_hash
and minimal_perfect_hash, 2025-11-18) the "ha" field of xrecord_t
initially held the "line_hash" value and once the line had been
interned that field was updated to hold the "minimal_perfect_hash". The
"line_hash" is only used to intern the line so there is no point in
storing it after all the input lines have been interned.
Removing the "line_hash" field from xrecord_t and storing it in
xdlclass_t where it is actually used makes it clearer that it is a
temporary value and it should not be used once we're calculated the
"minimal_perfect_hash". This also reduces the size of xrecord_t by 25%
on 64-bit platforms and 40% on 32-bit platforms. While the struct is
small we create one instance per input line so any saving is welcome.
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
/*
|
|
* LibXDiff by Davide Libenzi ( File Differential Library )
|
|
* Copyright (C) 2003 Davide Libenzi
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Davide Libenzi <davidel@xmailserver.org>
|
|
*
|
|
*/
|
|
|
|
#if !defined(XTYPES_H)
|
|
#define XTYPES_H
|
|
|
|
|
|
|
|
typedef struct s_chanode {
|
|
struct s_chanode *next;
|
|
long icurr;
|
|
} chanode_t;
|
|
|
|
typedef struct s_chastore {
|
|
chanode_t *head, *tail;
|
|
long isize, nsize;
|
|
chanode_t *ancur;
|
|
chanode_t *sncur;
|
|
long scurr;
|
|
} chastore_t;
|
|
|
|
typedef struct s_xrecord {
|
|
uint8_t const *ptr;
|
|
size_t size;
|
|
size_t minimal_perfect_hash;
|
|
} xrecord_t;
|
|
|
|
typedef struct s_xdfile {
|
|
xrecord_t *recs;
|
|
size_t nrec;
|
|
ptrdiff_t dstart, dend;
|
|
bool *changed;
|
|
size_t *reference_index;
|
|
size_t nreff;
|
|
} xdfile_t;
|
|
|
|
typedef struct s_xdfenv {
|
|
xdfile_t xdf1, xdf2;
|
|
} xdfenv_t;
|
|
|
|
|
|
|
|
#endif /* #if !defined(XTYPES_H) */
|