tmp = AvARRAY(av) - AvALLOC(av);
Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
AvMAX(av) += tmp;
- SvPV_set(av, (char*)AvALLOC(av));
+ AvARRAY(av) = AvALLOC(av);
if (AvREAL(av)) {
while (tmp)
ary[--tmp] = &PL_sv_undef;
ary[--tmp] = &PL_sv_undef;
}
- SvPV_set(av, (char*)AvALLOC(av));
+ AvARRAY(av) = AvALLOC(av);
AvMAX(av) = newmax;
}
}
sv_upgrade((SV *)av, SVt_PVAV);
/* sv_upgrade does AvREAL_only() */
AvALLOC(av) = 0;
- SvPV_set(av, NULL);
+ AvARRAY(av) = NULL;
AvMAX(av) = AvFILLp(av) = -1;
return av;
}
register I32 i;
Newx(ary,size,SV*);
AvALLOC(av) = ary;
- SvPV_set(av, (char*)ary);
- AvFILLp(av) = size - 1;
- AvMAX(av) = size - 1;
+ AvARRAY(av) = ary;
+ AvFILLp(av) = AvMAX(av) = size - 1;
for (i = 0; i < size; i++) {
assert (*strp);
ary[i] = newSV(0);
extra = AvARRAY(av) - AvALLOC(av);
if (extra) {
AvMAX(av) += extra;
- SvPV_set(av, (char*)AvALLOC(av));
+ AvARRAY(av) = AvALLOC(av);
}
AvFILLp(av) = -1;
SvREFCNT_dec(AvARRAY(av)[--key]);
}
Safefree(AvALLOC(av));
- AvALLOC(av) = 0;
- SvPV_set(av, NULL);
+ AvALLOC(av) = NULL;
+ AvARRAY(av) = NULL;
AvMAX(av) = AvFILLp(av) = -1;
}
AvMAX(av) += i;
AvFILLp(av) += i;
- SvPV_set(av, (char*)(AvARRAY(av) - i));
+ AvARRAY(av) = AvARRAY(av) - i;
}
if (num) {
register SV **ary;
/* Make extra elements into a buffer */
AvMAX(av) -= slide;
AvFILLp(av) -= slide;
- SvPV_set(av, (char*)(AvARRAY(av) + slide));
+ AvARRAY(av) = AvARRAY(av) + slide;
}
}
retval = *AvARRAY(av);
if (AvREAL(av))
*AvARRAY(av) = &PL_sv_undef;
- SvPV_set(av, (char*)(AvARRAY(av) + 1));
+ AvARRAY(av) = AvARRAY(av) + 1;
AvMAX(av)--;
AvFILLp(av)--;
if (SvSMAGICAL(av))
/*
=for apidoc av_len
-Returns the highest index in the array. Returns -1 if the array is
-empty.
+Returns the highest index in the array. The number of elements in the
+array is C<av_len(av) + 1>. Returns -1 if the array is empty.
=cut
*/
/*
=for apidoc av_fill
-Ensure than an array has a given number of elements, equivalent to
+Set the highest index in the array to the given number, equivalent to
Perl's C<$#array = $fill;>.
+The number of elements in the an array will be C<fill + 1> after
+av_fill() returns. If the array was previously shorter then the
+additional elements appended are set to C<PL_sv_undef>. If the array
+was longer, then the excess elements are freed. C<av_fill(av, -1)> is
+the same as C<av_clear(av)>.
+
=cut
*/
void