[tuple_delta_t] Micro-optimize encoding vector access

pull/4476/head
Behdad Esfahbod 1 year ago
parent 59cfb4c570
commit b532945987
  1. 22
      src/hb-ot-var-common.hh

@ -774,7 +774,7 @@ struct tuple_delta_t
unsigned encoded_len = 0;
while (i < num_deltas)
{
int val = deltas[i];
int val = deltas.arrayZ[i];
if (val == 0)
encoded_len += encode_delta_run_as_zeroes (i, encoded_bytes.sub_array (encoded_len), deltas);
else if (val >= -128 && val <= 127)
@ -793,7 +793,7 @@ struct tuple_delta_t
unsigned run_length = 0;
auto it = encoded_bytes.iter ();
unsigned encoded_len = 0;
while (i < num_deltas && deltas[i] == 0)
while (i < num_deltas && deltas.arrayZ[i] == 0)
{
i++;
run_length++;
@ -822,13 +822,13 @@ struct tuple_delta_t
unsigned num_deltas = deltas.length;
while (i < num_deltas)
{
int val = deltas[i];
int val = deltas.arrayZ[i];
if (val > 127 || val < -128)
break;
/* from fonttools: if there're 2 or more zeros in a sequence,
* it is better to start a new run to save bytes. */
if (val == 0 && i + 1 < num_deltas && deltas[i+1] == 0)
if (val == 0 && i + 1 < num_deltas && deltas.arrayZ[i+1] == 0)
break;
i++;
@ -845,7 +845,7 @@ struct tuple_delta_t
for (unsigned j = 0; j < 64; j++)
{
*it++ = static_cast<char> (deltas[start + j]);
*it++ = static_cast<char> (deltas.arrayZ[start + j]);
encoded_len++;
}
@ -860,7 +860,7 @@ struct tuple_delta_t
while (start < i)
{
*it++ = static_cast<char> (deltas[start++]);
*it++ = static_cast<char> (deltas.arrayZ[start++]);
encoded_len++;
}
}
@ -876,8 +876,8 @@ struct tuple_delta_t
unsigned num_deltas = deltas.length;
while (i < num_deltas)
{
int val = deltas[i];
int val = deltas.arrayZ[i];
/* start a new run for a single zero value*/
if (val == 0) break;
@ -886,7 +886,7 @@ struct tuple_delta_t
* Only start a new run when there're 2 continuous such values. */
if (val >= -128 && val <= 127 &&
i + 1 < num_deltas &&
deltas[i+1] >= -128 && deltas[i+1] <= 127)
deltas.arrayZ[i+1] >= -128 && deltas.arrayZ[i+1] <= 127)
break;
i++;
@ -902,7 +902,7 @@ struct tuple_delta_t
for (unsigned j = 0; j < 64; j++)
{
int16_t delta_val = deltas[start + j];
int16_t delta_val = deltas.arrayZ[start + j];
*it++ = static_cast<char> (delta_val >> 8);
*it++ = static_cast<char> (delta_val & 0xFF);
@ -919,7 +919,7 @@ struct tuple_delta_t
encoded_len++;
while (start < i)
{
int16_t delta_val = deltas[start++];
int16_t delta_val = deltas.arrayZ[start++];
*it++ = static_cast<char> (delta_val >> 8);
*it++ = static_cast<char> (delta_val & 0xFF);

Loading…
Cancel
Save