3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * '...for the Entwives desired order, and plenty, and peace (by which they
13 * meant that things should remain where they had set them).' --Treebeard
15 * [p.476 of _The Lord of the Rings_, III/iv: "Treebeard"]
19 =head1 Array Manipulation Functions
27 Perl_av_reify(pTHX_ AV *av)
32 PERL_ARGS_ASSERT_AV_REIFY;
33 assert(SvTYPE(av) == SVt_PVAV);
38 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
39 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array");
42 while (key > AvFILLp(av) + 1)
43 AvARRAY(av)[--key] = &PL_sv_undef;
45 SV * const sv = AvARRAY(av)[--key];
47 if (sv != &PL_sv_undef)
48 SvREFCNT_inc_simple_void_NN(sv);
50 key = AvARRAY(av) - AvALLOC(av);
52 AvALLOC(av)[--key] = &PL_sv_undef;
60 Pre-extend an array. The C<key> is the index to which the array should be
67 Perl_av_extend(pTHX_ AV *av, I32 key)
72 PERL_ARGS_ASSERT_AV_EXTEND;
73 assert(SvTYPE(av) == SVt_PVAV);
75 mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied);
77 SV *arg1 = sv_newmortal();
78 sv_setiv(arg1, (IV)(key + 1));
79 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "EXTEND", G_DISCARD, 1,
83 if (key > AvMAX(av)) {
88 if (AvALLOC(av) != AvARRAY(av)) {
89 ary = AvALLOC(av) + AvFILLp(av) + 1;
90 tmp = AvARRAY(av) - AvALLOC(av);
91 Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
93 AvARRAY(av) = AvALLOC(av);
96 ary[--tmp] = &PL_sv_undef;
98 if (key > AvMAX(av) - 10) {
99 newmax = key + AvMAX(av);
104 #ifdef PERL_MALLOC_WRAP
105 static const char oom_array_extend[] =
106 "Out of memory during array extend"; /* Duplicated in pp_hot.c */
110 #if !defined(STRANGE_MALLOC) && !defined(MYMALLOC)
115 #ifdef Perl_safesysmalloc_size
116 /* Whilst it would be quite possible to move this logic around
117 (as I did in the SV code), so as to set AvMAX(av) early,
118 based on calling Perl_safesysmalloc_size() immediately after
119 allocation, I'm not convinced that it is a great idea here.
120 In an array we have to loop round setting everything to
121 &PL_sv_undef, which means writing to memory, potentially lots
122 of it, whereas for the SV buffer case we don't touch the
123 "bonus" memory. So there there is no cost in telling the
124 world about it, whereas here we have to do work before we can
125 tell the world about it, and that work involves writing to
126 memory that might never be read. So, I feel, better to keep
127 the current lazy system of only writing to it if our caller
128 has a need for more space. NWC */
129 newmax = Perl_safesysmalloc_size((void*)AvALLOC(av)) /
130 sizeof(const SV *) - 1;
135 newmax = key + AvMAX(av) / 5;
137 MEM_WRAP_CHECK_1(newmax+1, SV*, oom_array_extend);
138 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
139 Renew(AvALLOC(av),newmax+1, SV*);
141 bytes = (newmax + 1) * sizeof(const SV *);
142 #define MALLOC_OVERHEAD 16
143 itmp = MALLOC_OVERHEAD;
144 while ((MEM_SIZE)(itmp - MALLOC_OVERHEAD) < bytes)
146 itmp -= MALLOC_OVERHEAD;
147 itmp /= sizeof(const SV *);
148 assert(itmp > newmax);
150 assert(newmax >= AvMAX(av));
151 Newx(ary, newmax+1, SV*);
152 Copy(AvALLOC(av), ary, AvMAX(av)+1, SV*);
153 Safefree(AvALLOC(av));
156 #ifdef Perl_safesysmalloc_size
159 ary = AvALLOC(av) + AvMAX(av) + 1;
160 tmp = newmax - AvMAX(av);
161 if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */
162 PL_stack_sp = AvALLOC(av) + (PL_stack_sp - PL_stack_base);
163 PL_stack_base = AvALLOC(av);
164 PL_stack_max = PL_stack_base + newmax;
168 newmax = key < 3 ? 3 : key;
169 MEM_WRAP_CHECK_1(newmax+1, SV*, oom_array_extend);
170 Newx(AvALLOC(av), newmax+1, SV*);
171 ary = AvALLOC(av) + 1;
173 AvALLOC(av)[0] = &PL_sv_undef; /* For the stacks */
177 ary[--tmp] = &PL_sv_undef;
180 AvARRAY(av) = AvALLOC(av);
189 Returns the SV at the specified index in the array. The C<key> is the
190 index. If lval is true, you are guaranteed to get a real SV back (in case
191 it wasn't real before), which you can then modify. Check that the return
192 value is non-null before dereferencing it to a C<SV*>.
194 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
195 more information on how to use this function on tied arrays.
197 The rough perl equivalent is C<$myarray[$idx]>.
203 Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval)
207 PERL_ARGS_ASSERT_AV_FETCH;
208 assert(SvTYPE(av) == SVt_PVAV);
210 if (SvRMAGICAL(av)) {
211 const MAGIC * const tied_magic
212 = mg_find((const SV *)av, PERL_MAGIC_tied);
213 if (tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata)) {
216 I32 adjust_index = 1;
218 /* Handle negative array indices 20020222 MJD */
219 SV * const * const negative_indices_glob =
220 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
222 NEGATIVE_INDICES_VAR, 16, 0);
224 if (negative_indices_glob && SvTRUE(GvSV(*negative_indices_glob)))
229 key += AvFILL(av) + 1;
236 sv_upgrade(sv, SVt_PVLV);
237 mg_copy(MUTABLE_SV(av), sv, 0, key);
238 if (!tied_magic) /* for regdata, force leavesub to make copies */
241 LvTARG(sv) = sv; /* fake (SV**) */
242 return &(LvTARG(sv));
247 key += AvFILL(av) + 1;
252 if (key > AvFILLp(av)) {
255 return av_store(av,key,newSV(0));
257 if (AvARRAY(av)[key] == &PL_sv_undef) {
260 return av_store(av,key,newSV(0));
264 && (!AvARRAY(av)[key] /* eg. @_ could have freed elts */
265 || SvIS_FREED(AvARRAY(av)[key]))) {
266 AvARRAY(av)[key] = &PL_sv_undef; /* 1/2 reify */
269 return &AvARRAY(av)[key];
275 Stores an SV in an array. The array index is specified as C<key>. The
276 return value will be NULL if the operation failed or if the value did not
277 need to be actually stored within the array (as in the case of tied
278 arrays). Otherwise it can be dereferenced to get the original C<SV*>. Note
279 that the caller is responsible for suitably incrementing the reference
280 count of C<val> before the call, and decrementing it if the function
283 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
284 more information on how to use this function on tied arrays.
290 Perl_av_store(pTHX_ register AV *av, I32 key, SV *val)
295 PERL_ARGS_ASSERT_AV_STORE;
296 assert(SvTYPE(av) == SVt_PVAV);
298 /* S_regclass relies on being able to pass in a NULL sv
299 (unicode_alternate may be NULL).
305 if (SvRMAGICAL(av)) {
306 const MAGIC * const tied_magic = mg_find((const SV *)av, PERL_MAGIC_tied);
308 /* Handle negative array indices 20020222 MJD */
310 bool adjust_index = 1;
311 SV * const * const negative_indices_glob =
312 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
314 NEGATIVE_INDICES_VAR, 16, 0);
315 if (negative_indices_glob
316 && SvTRUE(GvSV(*negative_indices_glob)))
319 key += AvFILL(av) + 1;
324 if (val != &PL_sv_undef) {
325 mg_copy(MUTABLE_SV(av), val, 0, key);
333 key += AvFILL(av) + 1;
338 if (SvREADONLY(av) && key >= AvFILL(av))
339 Perl_croak_no_modify(aTHX);
341 if (!AvREAL(av) && AvREIFY(av))
346 if (AvFILLp(av) < key) {
348 if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
349 PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */
351 ary[++AvFILLp(av)] = &PL_sv_undef;
352 } while (AvFILLp(av) < key);
357 SvREFCNT_dec(ary[key]);
359 if (SvSMAGICAL(av)) {
360 const MAGIC* const mg = SvMAGIC(av);
361 if (val != &PL_sv_undef) {
362 sv_magic(val, MUTABLE_SV(av), toLOWER(mg->mg_type), 0, key);
364 if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa)
365 PL_delaymagic |= DM_ARRAY_ISA;
367 mg_set(MUTABLE_SV(av));
375 Creates a new AV and populates it with a list of SVs. The SVs are copied
376 into the array, so they may be freed after the call to av_make. The new AV
377 will have a reference count of 1.
379 Perl equivalent: C<my @new_array = ($scalar1, $scalar2, $scalar3...);>
385 Perl_av_make(pTHX_ register I32 size, register SV **strp)
387 register AV * const av = MUTABLE_AV(newSV_type(SVt_PVAV));
388 /* sv_upgrade does AvREAL_only() */
389 PERL_ARGS_ASSERT_AV_MAKE;
390 assert(SvTYPE(av) == SVt_PVAV);
392 if (size) { /* "defined" was returning undef for size==0 anyway. */
398 AvFILLp(av) = AvMAX(av) = size - 1;
399 for (i = 0; i < size; i++) {
402 /* Don't let sv_setsv swipe, since our source array might
403 have multiple references to the same temp scalar (e.g.
404 from a list slice) */
407 sv_setsv_flags(ary[i], *strp,
408 SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
418 Clears an array, making it empty. Does not free the memory used by the
419 array itself. Perl equivalent: C<@myarray = ();>.
425 Perl_av_clear(pTHX_ register AV *av)
430 PERL_ARGS_ASSERT_AV_CLEAR;
431 assert(SvTYPE(av) == SVt_PVAV);
434 if (SvREFCNT(av) == 0) {
435 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array");
440 Perl_croak_no_modify(aTHX);
442 /* Give any tie a chance to cleanup first */
443 if (SvRMAGICAL(av)) {
444 const MAGIC* const mg = SvMAGIC(av);
445 if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa)
446 PL_delaymagic |= DM_ARRAY_ISA;
448 mg_clear(MUTABLE_SV(av));
455 SV** const ary = AvARRAY(av);
456 I32 index = AvFILLp(av) + 1;
458 SV * const sv = ary[--index];
459 /* undef the slot before freeing the value, because a
460 * destructor might try to modify this array */
461 ary[index] = &PL_sv_undef;
465 extra = AvARRAY(av) - AvALLOC(av);
468 AvARRAY(av) = AvALLOC(av);
477 Undefines the array. Frees the memory used by the array itself.
483 Perl_av_undef(pTHX_ register AV *av)
485 PERL_ARGS_ASSERT_AV_UNDEF;
486 assert(SvTYPE(av) == SVt_PVAV);
488 /* Give any tie a chance to cleanup first */
489 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
493 register I32 key = AvFILLp(av) + 1;
495 SvREFCNT_dec(AvARRAY(av)[--key]);
498 Safefree(AvALLOC(av));
501 AvMAX(av) = AvFILLp(av) = -1;
503 if(SvRMAGICAL(av)) mg_clear(MUTABLE_SV(av));
508 =for apidoc av_create_and_push
510 Push an SV onto the end of the array, creating the array if necessary.
511 A small internal helper function to remove a commonly duplicated idiom.
517 Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
519 PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH;
529 Pushes an SV onto the end of the array. The array will grow automatically
530 to accommodate the addition. This takes ownership of one reference count.
536 Perl_av_push(pTHX_ register AV *av, SV *val)
541 PERL_ARGS_ASSERT_AV_PUSH;
542 assert(SvTYPE(av) == SVt_PVAV);
545 Perl_croak_no_modify(aTHX);
547 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
548 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "PUSH", G_DISCARD, 1,
552 av_store(av,AvFILLp(av)+1,val);
558 Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
565 Perl_av_pop(pTHX_ register AV *av)
571 PERL_ARGS_ASSERT_AV_POP;
572 assert(SvTYPE(av) == SVt_PVAV);
575 Perl_croak_no_modify(aTHX);
576 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
577 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "POP", 0, 0);
579 retval = newSVsv(retval);
584 retval = AvARRAY(av)[AvFILLp(av)];
585 AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef;
587 mg_set(MUTABLE_SV(av));
593 =for apidoc av_create_and_unshift_one
595 Unshifts an SV onto the beginning of the array, creating the array if
597 A small internal helper function to remove a commonly duplicated idiom.
603 Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
605 PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE;
610 return av_store(*avp, 0, val);
614 =for apidoc av_unshift
616 Unshift the given number of C<undef> values onto the beginning of the
617 array. The array will grow automatically to accommodate the addition. You
618 must then use C<av_store> to assign values to these new elements.
624 Perl_av_unshift(pTHX_ register AV *av, register I32 num)
630 PERL_ARGS_ASSERT_AV_UNSHIFT;
631 assert(SvTYPE(av) == SVt_PVAV);
634 Perl_croak_no_modify(aTHX);
636 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
637 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "UNSHIFT",
638 G_DISCARD | G_UNDEF_FILL, num);
644 if (!AvREAL(av) && AvREIFY(av))
646 i = AvARRAY(av) - AvALLOC(av);
654 AvARRAY(av) = AvARRAY(av) - i;
658 const I32 i = AvFILLp(av);
659 /* Create extra elements */
660 const I32 slide = i > 0 ? i : 0;
662 av_extend(av, i + num);
665 Move(ary, ary + num, i + 1, SV*);
667 ary[--num] = &PL_sv_undef;
669 /* Make extra elements into a buffer */
671 AvFILLp(av) -= slide;
672 AvARRAY(av) = AvARRAY(av) + slide;
679 Shifts an SV off the beginning of the array. Returns C<&PL_sv_undef> if the
686 Perl_av_shift(pTHX_ register AV *av)
692 PERL_ARGS_ASSERT_AV_SHIFT;
693 assert(SvTYPE(av) == SVt_PVAV);
696 Perl_croak_no_modify(aTHX);
697 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
698 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "SHIFT", 0, 0);
700 retval = newSVsv(retval);
705 retval = *AvARRAY(av);
707 *AvARRAY(av) = &PL_sv_undef;
708 AvARRAY(av) = AvARRAY(av) + 1;
712 mg_set(MUTABLE_SV(av));
719 Returns the highest index in the array. The number of elements in the
720 array is C<av_len(av) + 1>. Returns -1 if the array is empty.
722 The Perl equivalent for this is C<$#myarray>.
728 Perl_av_len(pTHX_ AV *av)
730 PERL_ARGS_ASSERT_AV_LEN;
731 assert(SvTYPE(av) == SVt_PVAV);
739 Set the highest index in the array to the given number, equivalent to
740 Perl's C<$#array = $fill;>.
742 The number of elements in the an array will be C<fill + 1> after
743 av_fill() returns. If the array was previously shorter, then the
744 additional elements appended are set to C<PL_sv_undef>. If the array
745 was longer, then the excess elements are freed. C<av_fill(av, -1)> is
746 the same as C<av_clear(av)>.
751 Perl_av_fill(pTHX_ register AV *av, I32 fill)
756 PERL_ARGS_ASSERT_AV_FILL;
757 assert(SvTYPE(av) == SVt_PVAV);
761 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
762 SV *arg1 = sv_newmortal();
763 sv_setiv(arg1, (IV)(fill + 1));
764 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "STORESIZE", G_DISCARD,
768 if (fill <= AvMAX(av)) {
769 I32 key = AvFILLp(av);
770 SV** const ary = AvARRAY(av);
774 SvREFCNT_dec(ary[key]);
775 ary[key--] = &PL_sv_undef;
780 ary[++key] = &PL_sv_undef;
785 mg_set(MUTABLE_SV(av));
788 (void)av_store(av,fill,&PL_sv_undef);
792 =for apidoc av_delete
794 Deletes the element indexed by C<key> from the array, makes the element mortal,
795 and returns it. If C<flags> equals C<G_DISCARD>, the element is freed and null
796 is returned. Perl equivalent: C<my $elem = delete($myarray[$idx]);> for the
797 non-C<G_DISCARD> version and a void-context C<delete($myarray[$idx]);> for the
798 C<G_DISCARD> version.
803 Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags)
808 PERL_ARGS_ASSERT_AV_DELETE;
809 assert(SvTYPE(av) == SVt_PVAV);
812 Perl_croak_no_modify(aTHX);
814 if (SvRMAGICAL(av)) {
815 const MAGIC * const tied_magic
816 = mg_find((const SV *)av, PERL_MAGIC_tied);
817 if ((tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata))) {
818 /* Handle negative array indices 20020222 MJD */
821 unsigned adjust_index = 1;
823 SV * const * const negative_indices_glob =
824 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
826 NEGATIVE_INDICES_VAR, 16, 0);
827 if (negative_indices_glob
828 && SvTRUE(GvSV(*negative_indices_glob)))
832 key += AvFILL(av) + 1;
837 svp = av_fetch(av, key, TRUE);
841 if (mg_find(sv, PERL_MAGIC_tiedelem)) {
842 sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */
851 key += AvFILL(av) + 1;
856 if (key > AvFILLp(av))
859 if (!AvREAL(av) && AvREIFY(av))
861 sv = AvARRAY(av)[key];
862 if (key == AvFILLp(av)) {
863 AvARRAY(av)[key] = &PL_sv_undef;
866 } while (--key >= 0 && AvARRAY(av)[key] == &PL_sv_undef);
869 AvARRAY(av)[key] = &PL_sv_undef;
871 mg_set(MUTABLE_SV(av));
873 if (flags & G_DISCARD) {
883 =for apidoc av_exists
885 Returns true if the element indexed by C<key> has been initialized.
887 This relies on the fact that uninitialized array elements are set to
890 Perl equivalent: C<exists($myarray[$key])>.
895 Perl_av_exists(pTHX_ AV *av, I32 key)
898 PERL_ARGS_ASSERT_AV_EXISTS;
899 assert(SvTYPE(av) == SVt_PVAV);
901 if (SvRMAGICAL(av)) {
902 const MAGIC * const tied_magic
903 = mg_find((const SV *)av, PERL_MAGIC_tied);
904 const MAGIC * const regdata_magic
905 = mg_find((const SV *)av, PERL_MAGIC_regdata);
906 if (tied_magic || regdata_magic) {
907 SV * const sv = sv_newmortal();
909 /* Handle negative array indices 20020222 MJD */
911 unsigned adjust_index = 1;
913 SV * const * const negative_indices_glob =
914 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
916 NEGATIVE_INDICES_VAR, 16, 0);
917 if (negative_indices_glob
918 && SvTRUE(GvSV(*negative_indices_glob)))
922 key += AvFILL(av) + 1;
930 if(key >= 0 && regdata_magic) {
931 if (key <= AvFILL(av))
937 mg_copy(MUTABLE_SV(av), sv, 0, key);
938 mg = mg_find(sv, PERL_MAGIC_tiedelem);
940 magic_existspack(sv, mg);
941 return cBOOL(SvTRUE(sv));
948 key += AvFILL(av) + 1;
953 if (key <= AvFILLp(av) && AvARRAY(av)[key] != &PL_sv_undef
963 S_get_aux_mg(pTHX_ AV *av) {
967 PERL_ARGS_ASSERT_GET_AUX_MG;
968 assert(SvTYPE(av) == SVt_PVAV);
970 mg = mg_find((const SV *)av, PERL_MAGIC_arylen_p);
973 mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p,
974 &PL_vtbl_arylen_p, 0, 0);
976 /* sv_magicext won't set this for us because we pass in a NULL obj */
977 mg->mg_flags |= MGf_REFCOUNTED;
983 Perl_av_arylen_p(pTHX_ AV *av) {
984 MAGIC *const mg = get_aux_mg(av);
986 PERL_ARGS_ASSERT_AV_ARYLEN_P;
987 assert(SvTYPE(av) == SVt_PVAV);
989 return &(mg->mg_obj);
993 Perl_av_iter_p(pTHX_ AV *av) {
994 MAGIC *const mg = get_aux_mg(av);
996 PERL_ARGS_ASSERT_AV_ITER_P;
997 assert(SvTYPE(av) == SVt_PVAV);
999 #if IVSIZE == I32SIZE
1000 return (IV *)&(mg->mg_len);
1004 mg->mg_len = IVSIZE;
1006 mg->mg_ptr = (char *) temp;
1008 return (IV *)mg->mg_ptr;
1014 * c-indentation-style: bsd
1016 * indent-tabs-mode: t
1019 * ex: set ts=8 sts=4 sw=4 noet: