Lines Matching defs:invlist
23 Perl_populate_bitmap_from_invlist(pTHX_ SV * invlist, const UV offset, const U8 * bitmap, const Size_t len)
34 invlist_iterinit(invlist);
35 while (invlist_iternext(invlist, &start, &end)) {
44 invlist_iterfinish(invlist);
48 Perl_populate_invlist_from_bitmap(pTHX_ const U8 * bitmap, const Size_t bitmap_len, SV ** invlist, const UV offset)
67 *invlist = _add_range_to_invlist(*invlist,
84 * infinity. The even-numbered elements (invlist[0], invlist[2], invlist[4],
91 * range is invlist[0]..(invlist[1]-1), and all code points in that range are
92 * in the inversion list. The second range is invlist[1]..(invlist[2]-1), and
94 * range invlist[2]..(invlist[3]-1) gives code points that are in the inversion
103 * invlist[i] == N
104 * invlist[i+1] == N+1
109 * invlist[0] == UV_MAX
136 S__invlist_array_init(SV* const invlist, const bool will_have_0)
146 bool* offset = get_invlist_offset_addr(invlist);
147 UV* zero_addr = (UV *) SvPVX(invlist);
152 assert(! _invlist_len(invlist));
210 S_get_invlist_previous_index_addr(SV* invlist)
216 assert(is_invlist(invlist));
218 return &(((XINVLIST*) SvANY(invlist))->prev_index);
222 S_invlist_previous_index(SV* const invlist)
228 return *get_invlist_previous_index_addr(invlist);
232 S_invlist_set_previous_index(SV* const invlist, const IV index)
238 assert(index == 0 || index < (int) _invlist_len(invlist));
240 *get_invlist_previous_index_addr(invlist) = index;
244 S_invlist_trim(SV* invlist)
254 assert(is_invlist(invlist));
256 SvPV_renew(invlist, MAX(min_size, SvCUR(invlist) + 1));
260 S_invlist_clear(pTHX_ SV* invlist) /* Empty the inversion list */
264 assert(is_invlist(invlist));
266 invlist_set_len(invlist, 0, 0);
267 invlist_trim(invlist);
271 S_invlist_max(const SV* const invlist)
278 assert(is_invlist(invlist));
282 return SvLEN(invlist) == 0 /* This happens under _new_invlist_C_array */
283 ? FROM_INTERNAL_SIZE(SvCUR(invlist)) - 1
284 : FROM_INTERNAL_SIZE(SvLEN(invlist)) - 1;
288 S_initialize_invlist_guts(pTHX_ SV* invlist, const Size_t initial_size)
294 SvGROW(invlist, TO_INTERNAL_SIZE(initial_size + 1) + 1);
295 invlist_set_len(invlist, 0, 0);
298 invlist_iterfinish(invlist);
300 *get_invlist_previous_index_addr(invlist) = 0;
301 SvPOK_on(invlist); /* This allows B to extract the PV */
348 SV* invlist = newSV_type(SVt_INVLIST);
358 SvPV_set(invlist, (char *) (list + HEADER_LENGTH));
360 SvLEN_set(invlist, 0); /* Means we own the contents, and the system
363 *(get_invlist_offset_addr(invlist)) = offset;
368 invlist_set_len(invlist, length - offset, offset);
370 invlist_set_previous_index(invlist, 0);
373 invlist_iterfinish(invlist);
375 SvREADONLY_on(invlist);
376 SvPOK_on(invlist);
378 return invlist;
382 S__append_range_to_invlist(pTHX_ SV* const invlist,
390 UV max = invlist_max(invlist);
391 UV len = _invlist_len(invlist);
398 array = _invlist_array_init(invlist, ! offset);
408 array = invlist_array(invlist);
421 offset = *get_invlist_offset_addr(invlist);
430 invlist_set_len(invlist, len - 1, offset);
443 invlist_extend(invlist, len);
446 invlist_set_len(invlist, len, offset);
448 array = invlist_array(invlist);
451 invlist_set_len(invlist, len, offset);
463 invlist_set_len(invlist, len - 1, offset);
468 Perl__invlist_search(SV* const invlist, const UV cp)
479 IV high = _invlist_len(invlist);
491 array = invlist_array(invlist);
493 mid = invlist_previous_index(invlist);
556 invlist_set_previous_index(invlist, high);
1077 Perl__add_range_to_invlist(pTHX_ SV* invlist, UV start, UV end)
1094 SSize_t i_s; /* index into the invlist array where 'start'
1101 if (invlist == NULL) {
1102 invlist = _new_invlist(2);
1103 _append_range_to_invlist(invlist, start, end);
1104 return invlist;
1108 len = _invlist_len(invlist);
1110 _append_range_to_invlist(invlist, start, end);
1111 return invlist;
1115 array = invlist_array(invlist);
1118 cur_highest = invlist_highest(invlist);
1123 _append_range_to_invlist(invlist, start, end);
1124 return invlist;
1128 _append_range_to_invlist(invlist, cur_highest + 1, end);
1158 _invlist_union(invlist, range_invlist, &invlist);
1162 return invlist;
1182 * invlist[i_s] <= start < array[i_s+1]
1184 i_s = _invlist_search(invlist, start);
1199 : _invlist_search(invlist, end);
1202 /* Here generally invlist[i_e] <= end < array[i_e+1]. But if invlist[i_e]
1203 * is a range that goes to infinity there is no element at invlist[i_e+1],
1237 invlist_set_len(invlist,
1239 *(get_invlist_offset_addr(invlist)));
1240 return invlist;
1275 invlist_set_len(invlist, i_s + 1, *(get_invlist_offset_addr(invlist)));
1276 return invlist;
1304 return invlist;
1311 invlist_extend(invlist, len + 2);
1312 array = invlist_array(invlist);
1320 invlist_set_len(invlist, len + 2, *(get_invlist_offset_addr(invlist)));
1321 return invlist;
1329 invlist_set_len(invlist,
1331 *(get_invlist_offset_addr(invlist)));
1333 return invlist;
1352 SV* invlist = _new_invlist(size);
1357 invlist = add_cp_to_invlist(invlist, element0);
1358 offset = *get_invlist_offset_addr(invlist);
1360 invlist_set_len(invlist, size, offset);
1361 *other_elements_ptr = invlist_array(invlist) + 1;
1362 return invlist;
1369 Perl__invlist_invert(pTHX_ SV* const invlist)
1377 assert(! invlist_is_iterating(invlist));
1380 if (_invlist_len(invlist) == 0) {
1381 _append_range_to_invlist(invlist, 0, UV_MAX);
1385 *get_invlist_offset_addr(invlist) = ! *get_invlist_offset_addr(invlist);
1389 Perl_invlist_clone(pTHX_ SV* const invlist, SV* new_invlist)
1394 const STRLEN nominal_length = _invlist_len(invlist);
1395 const STRLEN physical_length = SvCUR(invlist);
1396 const bool offset = *(get_invlist_offset_addr(invlist));
1410 Copy(SvPVX(invlist), SvPVX(new_invlist), physical_length, char);
1421 const char * const indent, SV* const invlist)
1424 * inversion list 'invlist' to 'file' at 'level' Each line is prefixed by
1442 if (invlist_is_iterating(invlist)) {
1449 invlist_iterinit(invlist);
1450 while (invlist_iternext(invlist, &start, &end)) {