/* invlist_inline.h * * Copyright (C) 2012 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. */ #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) /* An element is in an inversion list iff its index is even numbered: 0, 2, 4, * etc */ #define ELEMENT_RANGE_MATCHES_INVLIST(i) (! ((i) & 1)) #define PREV_RANGE_MATCHES_INVLIST(i) (! ELEMENT_RANGE_MATCHES_INVLIST(i)) /* This converts to/from our UVs to what the SV code is expecting: bytes. */ #define TO_INTERNAL_SIZE(x) ((x) * sizeof(UV)) #define FROM_INTERNAL_SIZE(x) ((x)/ sizeof(UV)) PERL_STATIC_INLINE bool* S_get_invlist_offset_addr(SV* invlist) { /* Return the address of the field that says whether the inversion list is * offset (it contains 1) or not (contains 0) */ PERL_ARGS_ASSERT_GET_INVLIST_OFFSET_ADDR; assert(SvTYPE(invlist) == SVt_INVLIST); return &(((XINVLIST*) SvANY(invlist))->is_offset); } PERL_STATIC_INLINE UV S__invlist_len(SV* const invlist) { /* Returns the current number of elements stored in the inversion list's * array */ PERL_ARGS_ASSERT__INVLIST_LEN; assert(SvTYPE(invlist) == SVt_INVLIST); return (SvCUR(invlist) == 0) ? 0 : FROM_INTERNAL_SIZE(SvCUR(invlist)) - *get_invlist_offset_addr(invlist); } PERL_STATIC_INLINE bool S__invlist_contains_cp(SV* const invlist, const UV cp) { /* Does <invlist> contain code point <cp> as part of the set? */ IV index = _invlist_search(invlist, cp); PERL_ARGS_ASSERT__INVLIST_CONTAINS_CP; return index >= 0 && ELEMENT_RANGE_MATCHES_INVLIST(index); } PERL_STATIC_INLINE UV* S_invlist_array(SV* const invlist) { /* Returns the pointer to the inversion list's array. Every time the * length changes, this needs to be called in case malloc or realloc moved * it */ PERL_ARGS_ASSERT_INVLIST_ARRAY; /* Must not be empty. If these fail, you probably didn't check for <len> * being non-zero before trying to get the array */ assert(_invlist_len(invlist)); /* The very first element always contains zero, The array begins either * there, or if the inversion list is offset, at the element after it. * The offset header field determines which; it contains 0 or 1 to indicate * how much additionally to add */ assert(0 == *(SvPVX(invlist))); return ((UV *) SvPVX(invlist) + *get_invlist_offset_addr(invlist)); } # if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGEXEC_C) /* These symbols are only needed later in regcomp.c */ # undef TO_INTERNAL_SIZE # undef FROM_INTERNAL_SIZE # endif #endif
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
EXTERN.h | File | 1.67 KB | 0644 |
|
INTERN.h | File | 1.24 KB | 0644 |
|
XSUB.h | File | 23.87 KB | 0644 |
|
av.h | File | 3.24 KB | 0644 |
|
bitcount.h | File | 850 B | 0644 |
|
charclass_invlists.h | File | 949.68 KB | 0644 |
|
config.h | File | 163.48 KB | 0644 |
|
cop.h | File | 38.61 KB | 0644 |
|
cv.h | File | 11.76 KB | 0644 |
|
dosish.h | File | 5.37 KB | 0644 |
|
dquote_inline.h | File | 1.8 KB | 0644 |
|
ebcdic_tables.h | File | 29.16 KB | 0644 |
|
embed.h | File | 95.07 KB | 0644 |
|
embedvar.h | File | 18.47 KB | 0644 |
|
fakesdio.h | File | 3.14 KB | 0644 |
|
feature.h | File | 4.8 KB | 0644 |
|
form.h | File | 1.43 KB | 0644 |
|
git_version.h | File | 357 B | 0644 |
|
gv.h | File | 10.46 KB | 0644 |
|
handy.h | File | 120.46 KB | 0644 |
|
hv.h | File | 24.97 KB | 0644 |
|
hv_func.h | File | 13.1 KB | 0644 |
|
inline.h | File | 45.39 KB | 0644 |
|
intrpvar.h | File | 28.79 KB | 0644 |
|
invlist_inline.h | File | 2.69 KB | 0644 |
|
iperlsys.h | File | 47.66 KB | 0644 |
|
keywords.h | File | 6.43 KB | 0644 |
|
l1_char_class_tab.h | File | 123.94 KB | 0644 |
|
libperl.so | File | 2.08 MB | 0755 |
|
malloc_ctl.h | File | 1.48 KB | 0644 |
|
metaconfig.h | File | 674 B | 0644 |
|
mg.h | File | 2.94 KB | 0644 |
|
mg_data.h | File | 4.81 KB | 0644 |
|
mg_raw.h | File | 4.16 KB | 0644 |
|
mg_vtable.h | File | 9.12 KB | 0644 |
|
mydtrace.h | File | 1.65 KB | 0644 |
|
nostdio.h | File | 3.31 KB | 0644 |
|
op.h | File | 35.57 KB | 0644 |
|
op_reg_common.h | File | 5.77 KB | 0644 |
|
opcode.h | File | 89.73 KB | 0644 |
|
opnames.h | File | 8.63 KB | 0644 |
|
overload.h | File | 3.2 KB | 0644 |
|
pad.h | File | 16.84 KB | 0644 |
|
parser.h | File | 6.75 KB | 0644 |
|
patchlevel.h | File | 9.67 KB | 0644 |
|
perl.h | File | 237.54 KB | 0644 |
|
perlapi.h | File | 5.73 KB | 0644 |
|
perldtrace.h | File | 3.22 KB | 0644 |
|
perlio.h | File | 9.24 KB | 0644 |
|
perliol.h | File | 13.44 KB | 0644 |
|
perlsdio.h | File | 527 B | 0644 |
|
perlvars.h | File | 9.46 KB | 0644 |
|
perly.h | File | 4.27 KB | 0644 |
|
pp.h | File | 26.93 KB | 0644 |
|
pp_proto.h | File | 11.8 KB | 0644 |
|
proto.h | File | 240.98 KB | 0644 |
|
reentr.h | File | 76.44 KB | 0644 |
|
regcharclass.h | File | 141.19 KB | 0644 |
|
regcomp.h | File | 46.68 KB | 0644 |
|
regexp.h | File | 33.57 KB | 0644 |
|
regnodes.h | File | 34.99 KB | 0644 |
|
scope.h | File | 11.63 KB | 0644 |
|
sv.h | File | 82.28 KB | 0644 |
|
thread.h | File | 11.73 KB | 0644 |
|
time64.h | File | 1.54 KB | 0644 |
|
time64_config.h | File | 1.98 KB | 0644 |
|
uconfig.h | File | 163.21 KB | 0644 |
|
unicode_constants.h | File | 7.8 KB | 0644 |
|
unixish.h | File | 4.99 KB | 0644 |
|
utf8.h | File | 57.73 KB | 0644 |
|
utfebcdic.h | File | 65.72 KB | 0644 |
|
util.h | File | 9.38 KB | 0644 |
|
uudmap.h | File | 904 B | 0644 |
|
vutil.h | File | 7.29 KB | 0644 |
|
warnings.h | File | 7.63 KB | 0644 |
|