[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 /* av.h 2 * 3 * Copyright (C) 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, 4 * 2000, 2001, 2002, 2005, 2006, 2007, by Larry Wall and others 5 * 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. 8 * 9 */ 10 11 struct xpvav { 12 union { 13 NV xnv_nv; /* numeric value, if any */ 14 HV * xgv_stash; 15 struct { 16 U32 xlow; 17 U32 xhigh; 18 } xpad_cop_seq; /* used by pad.c for cop_sequence */ 19 struct { 20 U32 xbm_previous; /* how many characters in string before rare? */ 21 U8 xbm_flags; 22 U8 xbm_rare; /* rarest character in string */ 23 } xbm_s; /* fields from PVBM */ 24 } xnv_u; 25 SSize_t xav_fill; /* Index of last element present */ 26 SSize_t xav_max; /* max index for which array has space */ 27 union { 28 IV xivu_iv; /* integer value or pv offset */ 29 UV xivu_uv; 30 void * xivu_p1; 31 I32 xivu_i32; 32 HEK * xivu_namehek; 33 } xiv_u; 34 union { 35 MAGIC* xmg_magic; /* linked list of magicalness */ 36 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */ 37 } xmg_u; 38 HV* xmg_stash; /* class package */ 39 }; 40 41 typedef struct { 42 SSize_t xav_fill; /* Index of last element present */ 43 SSize_t xav_max; /* max index for which array has space */ 44 union { 45 IV xivu_iv; /* integer value or pv offset */ 46 UV xivu_uv; 47 void * xivu_p1; 48 I32 xivu_i32; 49 HEK * xivu_namehek; 50 } xiv_u; 51 union { 52 MAGIC* xmg_magic; /* linked list of magicalness */ 53 HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */ 54 } xmg_u; 55 HV* xmg_stash; /* class package */ 56 } xpvav_allocated; 57 58 /* SV** xav_alloc; */ 59 #define xav_alloc xiv_u.xivu_p1 60 /* SV* xav_arylen; */ 61 62 /* SVpav_REAL is set for all AVs whose xav_array contents are refcounted. 63 * Some things like "@_" and the scratchpad list do not set this, to 64 * indicate that they are cheating (for efficiency) by not refcounting 65 * the AV's contents. 66 * 67 * SVpav_REIFY is only meaningful on such "fake" AVs (i.e. where SVpav_REAL 68 * is not set). It indicates that the fake AV is capable of becoming 69 * real if the array needs to be modified in some way. Functions that 70 * modify fake AVs check both flags to call av_reify() as appropriate. 71 * 72 * Note that the Perl stack and @DB::args have neither flag set. (Thus, 73 * items that go on the stack are never refcounted.) 74 * 75 * These internal details are subject to change any time. AV 76 * manipulations external to perl should not care about any of this. 77 * GSAR 1999-09-10 78 */ 79 80 /* 81 =head1 Handy Values 82 83 =for apidoc AmU||Nullav 84 Null AV pointer. 85 86 =head1 Array Manipulation Functions 87 88 =for apidoc Am|int|AvFILL|AV* av 89 Same as C<av_len()>. Deprecated, use C<av_len()> instead. 90 91 =cut 92 */ 93 94 #define Nullav Null(AV*) 95 96 #define AvARRAY(av) ((av)->sv_u.svu_array) 97 #define AvALLOC(av) (*((SV***)&((XPVAV*) SvANY(av))->xav_alloc)) 98 #define AvMAX(av) ((XPVAV*) SvANY(av))->xav_max 99 #define AvFILLp(av) ((XPVAV*) SvANY(av))->xav_fill 100 #define AvARYLEN(av) (*Perl_av_arylen_p(aTHX_ (AV*)av)) 101 102 #define AvREAL(av) (SvFLAGS(av) & SVpav_REAL) 103 #define AvREAL_on(av) (SvFLAGS(av) |= SVpav_REAL) 104 #define AvREAL_off(av) (SvFLAGS(av) &= ~SVpav_REAL) 105 #define AvREAL_only(av) (AvREIFY_off(av), SvFLAGS(av) |= SVpav_REAL) 106 #define AvREIFY(av) (SvFLAGS(av) & SVpav_REIFY) 107 #define AvREIFY_on(av) (SvFLAGS(av) |= SVpav_REIFY) 108 #define AvREIFY_off(av) (SvFLAGS(av) &= ~SVpav_REIFY) 109 #define AvREIFY_only(av) (AvREAL_off(av), SvFLAGS(av) |= SVpav_REIFY) 110 111 #define AvREALISH(av) (SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY)) 112 113 #define AvFILL(av) ((SvRMAGICAL((SV *) (av))) \ 114 ? mg_size((SV *) av) : AvFILLp(av)) 115 116 #define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES" 117 118 /* 119 * Local variables: 120 * c-indentation-style: bsd 121 * c-basic-offset: 4 122 * indent-tabs-mode: t 123 * End: 124 * 125 * ex: set ts=8 sts=4 sw=4 noet: 126 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |