X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.h;h=88740450992ecefd42e3707c06906d4b6e28af0b;hb=92e71c9183a0db74aa4ef4999dac86e2ffadfac4;hp=61a01f0896aac24f47059fb9db3eff7bef17bbb1;hpb=e736a858356e87659136ef1f34af858e253efe45;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.h b/av.h index 61a01f0..8874045 100644 --- a/av.h +++ b/av.h @@ -1,47 +1,33 @@ /* av.h * * Copyright (C) 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2005, by Larry Wall and others + * 2000, 2001, 2002, 2005, 2006, 2007, 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. * */ +#define _XPVAV_ALLOCATED_HEAD \ + SSize_t xav_fill; /* Index of last element present */ \ + SSize_t xav_max /* max index for which array has space */ + +#define _XPVAV_HEAD \ + union _xnvu xnv_u; \ + _XPVAV_ALLOCATED_HEAD + struct xpvav { - NV xnv_nv; /* numeric value, if any */ - SSize_t xav_fill; /* Index of last element present */ - SSize_t xav_max; /* max index for which array has space */ - union { - IV xivu_iv; /* integer value or pv offset */ - UV xivu_uv; - void * xivu_p1; - } xiv_u; - union { - MAGIC* xmg_magic; /* linked list of magicalness */ - HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */ - } xmg_u; - HV* xmg_stash; /* class package */ + _XPVAV_HEAD; + _XPVMG_HEAD; }; -#if 0 -typedef struct xpvav xpvav_allocated; -#else typedef struct { - SSize_t xav_fill; /* Index of last element present */ - SSize_t xav_max; /* max index for which array has space */ - union { - IV xivu_iv; /* integer value or pv offset */ - UV xivu_uv; - void * xivu_p1; - } xiv_u; - union { - MAGIC* xmg_magic; /* linked list of magicalness */ - HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */ - } xmg_u; - HV* xmg_stash; /* class package */ + _XPVAV_ALLOCATED_HEAD; + _XPVMG_HEAD; } xpvav_allocated; -#endif + +#undef _XPVAV_ALLOCATED_HEAD +#undef _XPVAV_HEAD /* SV** xav_alloc; */ #define xav_alloc xiv_u.xivu_p1 @@ -71,6 +57,8 @@ typedef struct { =for apidoc AmU||Nullav Null AV pointer. +(deprecated - use C<(AV *)NULL> instead) + =head1 Array Manipulation Functions =for apidoc Am|int|AvFILL|AV* av @@ -79,7 +67,9 @@ Same as C. Deprecated, use C instead. =cut */ -#define Nullav Null(AV*) +#ifndef PERL_CORE +# define Nullav Null(AV*) +#endif #define AvARRAY(av) ((av)->sv_u.svu_array) #define AvALLOC(av) (*((SV***)&((XPVAV*) SvANY(av))->xav_alloc)) @@ -104,6 +94,16 @@ Same as C. Deprecated, use C instead. #define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES" /* +=for apidoc newAV + +Creates a new AV. The reference count is set to 1. + +=cut +*/ + +#define newAV() ((AV *)newSV_type(SVt_PVAV)) + +/* * Local variables: * c-indentation-style: bsd * c-basic-offset: 4