source: trunk/third/perl/av.h @ 14545

Revision 14545, 2.8 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1/*    av.h
2 *
3 *    Copyright (c) 1991-2000, Larry Wall
4 *
5 *    You may distribute under the terms of either the GNU General Public
6 *    License or the Artistic License, as specified in the README file.
7 *
8 */
9
10struct xpvav {
11    char*       xav_array;      /* pointer to first array element */
12    SSize_t     xav_fill;       /* Index of last element present */
13    SSize_t     xav_max;        /* max index for which array has space */
14    IV          xof_off;        /* ptr is incremented by offset */
15    NV          xnv_nv;         /* numeric value, if any */
16    MAGIC*      xmg_magic;      /* magic for scalar array */
17    HV*         xmg_stash;      /* class package */
18
19    SV**        xav_alloc;      /* pointer to malloced string */
20    SV*         xav_arylen;
21    U8          xav_flags;
22};
23
24
25/* AVf_REAL is set for all AVs whose xav_array contents are refcounted.
26 * Some things like "@_" and the scratchpad list do not set this, to
27 * indicate that they are cheating (for efficiency) by not refcounting
28 * the AV's contents.
29 *
30 * AVf_REIFY is only meaningful on such "fake" AVs (i.e. where AVf_REAL
31 * is not set).  It indicates that the fake AV is capable of becoming
32 * real if the array needs to be modified in some way.  Functions that
33 * modify fake AVs check both flags to call av_reify() as appropriate.
34 *
35 * Note that the Perl stack has neither flag set. (Thus, items that go
36 * on the stack are never refcounted.)
37 *
38 * These internal details are subject to change any time.  AV
39 * manipulations external to perl should not care about any of this.
40 * GSAR 1999-09-10
41 */
42#define AVf_REAL 1      /* free old entries */
43#define AVf_REIFY 2     /* can become real */
44
45/* XXX this is not used anywhere */
46#define AVf_REUSED 4    /* got undeffed--don't turn old memory into SVs now */
47
48/*
49=for apidoc AmU||Nullav
50Null AV pointer.
51
52=for apidoc Am|int|AvFILL|AV* av
53Same as C<av_len()>.  Deprecated, use C<av_len()> instead.
54
55=cut
56*/
57
58#define Nullav Null(AV*)
59
60#define AvARRAY(av)     ((SV**)((XPVAV*)  SvANY(av))->xav_array)
61#define AvALLOC(av)     ((XPVAV*)  SvANY(av))->xav_alloc
62#define AvMAX(av)       ((XPVAV*)  SvANY(av))->xav_max
63#define AvFILLp(av)     ((XPVAV*)  SvANY(av))->xav_fill
64#define AvARYLEN(av)    ((XPVAV*)  SvANY(av))->xav_arylen
65#define AvFLAGS(av)     ((XPVAV*)  SvANY(av))->xav_flags
66
67#define AvREAL(av)      (AvFLAGS(av) & AVf_REAL)
68#define AvREAL_on(av)   (AvFLAGS(av) |= AVf_REAL)
69#define AvREAL_off(av)  (AvFLAGS(av) &= ~AVf_REAL)
70#define AvREIFY(av)     (AvFLAGS(av) & AVf_REIFY)
71#define AvREIFY_on(av)  (AvFLAGS(av) |= AVf_REIFY)
72#define AvREIFY_off(av) (AvFLAGS(av) &= ~AVf_REIFY)
73#define AvREUSED(av)    (AvFLAGS(av) & AVf_REUSED)
74#define AvREUSED_on(av) (AvFLAGS(av) |= AVf_REUSED)
75#define AvREUSED_off(av) (AvFLAGS(av) &= ~AVf_REUSED)
76
77#define AvREALISH(av)   (AvFLAGS(av) & (AVf_REAL|AVf_REIFY))
78                                         
79#define AvFILL(av)      ((SvRMAGICAL((SV *) (av))) \
80                          ? mg_size((SV *) av) : AvFILLp(av))
81
Note: See TracBrowser for help on using the repository browser.