<commit_before>#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
 uri_encode.c - functions for URI percent encoding / decoding
*/

#define _____ "\0\0\0"
#define ESCSZ (sizeof(_____)-1)
static const char uri_encode_tbl[ESCSZ * 0x100] =
/*    0     1     2     3     4     5     6     7     8     9     a     b     c     d     e     f */
{
    "%00" "%01" "%02" "%03" "%04" "%05" "%06" "%07" "%08" "%09" "%0A" "%0B" "%0C" "%0D" "%0E" "%0F"  /* 0:   0 ~  15 */
    "%10" "%11" "%12" "%13" "%14" "%15" "%16" "%17" "%18" "%19" "%1A" "%1B" "%1C" "%1D" "%1E" "%1F"  /* 1:  16 ~  31 */
    "%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29" "%2A" "%2B" "%2C" _____ _____ "%2F"  /* 2:  32 ~  47 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%3A" "%3B" "%3C" "%3D" "%3E" "%3F"  /* 3:  48 ~  63 */
    "%40" _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____  /* 4:  64 ~  79 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%5B" "%5C" "%5D" "%5E" _____  /* 5:  80 ~  95 */
    "%60" _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____  /* 6:  96 ~ 111 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%7B" "%7C" "%7D" _____ "%7F"  /* 7: 112 ~ 127 */
    "%80" "%81" "%82" "%83" "%84" "%85" "%86" "%87" "%88" "%89" "%8A" "%8B" "%8C" "%8D" "%8E" "%8F"  /* 8: 128 ~ 143 */
    "%90" "%91" "%92" "%93" "%94" "%95" "%96" "%97" "%98" "%99" "%9A" "%9B" "%9C" "%9D" "%9E" "%9F"  /* 9: 144 ~ 159 */
    "%A0" "%A1" "%A2" "%A3" "%A4" "%A5" "%A6" "%A7" "%A8" "%A9" "%AA" "%AB" "%AC" "%AD" "%AE" "%AF"  /* A: 160 ~ 175 */
    "%B0" "%B1" "%B2" "%B3" "%B4" "%B5" "%B6" "%B7" "%B8" "%B9" "%BA" "%BB" "%BC" "%BD" "%BE" "%BF"  /* B: 176 ~ 191 */
    "%C0" "%C1" "%C2" "%C3" "%C4" "%C5" "%C6" "%C7" "%C8" "%C9" "%CA" "%CB" "%CC" "%CD" "%CE" "%CF"  /* C: 192 ~ 207 */
    "%D0" "%D1" "%D2" "%D3" "%D4" "%D5" "%D6" "%D7" "%D8" "%D9" "%DA" "%DB" "%DC" "%DD" "%DE" "%DF"  /* D: 208 ~ 223 */
    "%E0" "%E1" "%E2" "%E3" "%E4" "%E5" "%E6" "%E7" "%E8" "%E9" "%EA" "%EB" "%EC" "%ED" "%EE" "%EF"  /* E: 224 ~ 239 */
    "%F0" "%F1" "%F2" "%F3" "%F4" "%F5" "%F6" "%F7" "%F8" "%F9" "%FA" "%FB" "%FC" "%FD" "%FE" "%FF"  /* F: 240 ~ 255 */
};

#define __ 0xFF
static const unsigned char hexval[0x100] = {
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 00-0F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 10-1F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 20-2F */
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9,__,__,__,__,__,__, /* 30-3F */
  __,10,11,12,13,14,15,__,__,__,__,__,__,__,__,__, /* 40-4F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 50-5F */
  __,10,11,12,13,14,15,__,__,__,__,__,__,__,__,__, /* 60-6F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 70-7F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 80-8F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 90-9F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* A0-AF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* B0-BF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* C0-CF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* D0-DF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* E0-EF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* F0-FF */
};
#undef __

size_t uri_encode (const char *src, const size_t len, char *dst)
{
  size_t i = 0, j = 0;
  while (i < len)
  {
    const char * code = &uri_encode_tbl[ ESCSZ * (unsigned char)src[i] ];
    if (*code)
    {
      memcpy(&dst[j], code, ESCSZ);
      j += ESCSZ;
    }
    else
    {
      dst[j] = src[i];
      j++;
    }
    i++;
  }
  dst[j] = '\0';
  return j;<commit_msg>minimize conditional jumps in encode<commit_after>#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
 uri_encode.c - functions for URI percent encoding / decoding
*/

#define _____ "\0\0\0"
#define ESCSZ (sizeof(_____)-1)
static const char uri_encode_tbl[ESCSZ * 0x100] =
/*    0     1     2     3     4     5     6     7     8     9     a     b     c     d     e     f */
{
    "%00" "%01" "%02" "%03" "%04" "%05" "%06" "%07" "%08" "%09" "%0A" "%0B" "%0C" "%0D" "%0E" "%0F"  /* 0:   0 ~  15 */
    "%10" "%11" "%12" "%13" "%14" "%15" "%16" "%17" "%18" "%19" "%1A" "%1B" "%1C" "%1D" "%1E" "%1F"  /* 1:  16 ~  31 */
    "%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29" "%2A" "%2B" "%2C" _____ _____ "%2F"  /* 2:  32 ~  47 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%3A" "%3B" "%3C" "%3D" "%3E" "%3F"  /* 3:  48 ~  63 */
    "%40" _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____  /* 4:  64 ~  79 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%5B" "%5C" "%5D" "%5E" _____  /* 5:  80 ~  95 */
    "%60" _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____  /* 6:  96 ~ 111 */
    _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ "%7B" "%7C" "%7D" _____ "%7F"  /* 7: 112 ~ 127 */
    "%80" "%81" "%82" "%83" "%84" "%85" "%86" "%87" "%88" "%89" "%8A" "%8B" "%8C" "%8D" "%8E" "%8F"  /* 8: 128 ~ 143 */
    "%90" "%91" "%92" "%93" "%94" "%95" "%96" "%97" "%98" "%99" "%9A" "%9B" "%9C" "%9D" "%9E" "%9F"  /* 9: 144 ~ 159 */
    "%A0" "%A1" "%A2" "%A3" "%A4" "%A5" "%A6" "%A7" "%A8" "%A9" "%AA" "%AB" "%AC" "%AD" "%AE" "%AF"  /* A: 160 ~ 175 */
    "%B0" "%B1" "%B2" "%B3" "%B4" "%B5" "%B6" "%B7" "%B8" "%B9" "%BA" "%BB" "%BC" "%BD" "%BE" "%BF"  /* B: 176 ~ 191 */
    "%C0" "%C1" "%C2" "%C3" "%C4" "%C5" "%C6" "%C7" "%C8" "%C9" "%CA" "%CB" "%CC" "%CD" "%CE" "%CF"  /* C: 192 ~ 207 */
    "%D0" "%D1" "%D2" "%D3" "%D4" "%D5" "%D6" "%D7" "%D8" "%D9" "%DA" "%DB" "%DC" "%DD" "%DE" "%DF"  /* D: 208 ~ 223 */
    "%E0" "%E1" "%E2" "%E3" "%E4" "%E5" "%E6" "%E7" "%E8" "%E9" "%EA" "%EB" "%EC" "%ED" "%EE" "%EF"  /* E: 224 ~ 239 */
    "%F0" "%F1" "%F2" "%F3" "%F4" "%F5" "%F6" "%F7" "%F8" "%F9" "%FA" "%FB" "%FC" "%FD" "%FE" "%FF"  /* F: 240 ~ 255 */
};

#define __ 0xFF
static const unsigned char hexval[0x100] = {
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 00-0F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 10-1F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 20-2F */
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9,__,__,__,__,__,__, /* 30-3F */
  __,10,11,12,13,14,15,__,__,__,__,__,__,__,__,__, /* 40-4F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 50-5F */
  __,10,11,12,13,14,15,__,__,__,__,__,__,__,__,__, /* 60-6F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 70-7F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 80-8F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* 90-9F */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* A0-AF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* B0-BF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* C0-CF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* D0-DF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* E0-EF */
  __,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__, /* F0-FF */
};
#undef __

size_t uri_encode (const char *src, const size_t len, char *dst)
{
  size_t i = 0, j = 0;
  while (i < len)
  {
    const char * code = &uri_encode_tbl[ ESCSZ * (unsigned char)src[i] ];
    dst[j++] = src[i++];
    if (!*code) continue;
    memcpy(&dst[j-1], code, ESCSZ);
    j += ESCSZ - 1;
  }
  dst[j] = '\0';
  return j;
{'fraction_non_alphanumeric': 0.29648962547305235, 'fraction_numerical': 0.10309278350515463, 'mean_word_length': 3.25069328896284, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1123212', 'n_tokens_mistral': 3899, 'n_tokens_neox': 3379, 'n_words': 730}