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

Revision 18450, 2.9 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18449, which included commits to RCS files with non-trunk default branches.
Line 
1/*    av.h
2 *
3 *    Copyright (c) 1991-2002, 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 beginning of C array of SVs */
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 and @DB::args have neither flag set. (Thus,
36 * items that go 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=head1 Handy Values
50
51=for apidoc AmU||Nullav
52Null AV pointer.
53
54=head1 Array Manipulation Functions
55
56=for apidoc Am|int|AvFILL|AV* av
57Same as C<av_len()>.  Deprecated, use C<av_len()> instead.
58
59=cut
60*/
61
62#define Nullav Null(AV*)
63
64#define AvARRAY(av)     ((SV**)((XPVAV*)  SvANY(av))->xav_array)
65#define AvALLOC(av)     ((XPVAV*)  SvANY(av))->xav_alloc
66#define AvMAX(av)       ((XPVAV*)  SvANY(av))->xav_max
67#define AvFILLp(av)     ((XPVAV*)  SvANY(av))->xav_fill
68#define AvARYLEN(av)    ((XPVAV*)  SvANY(av))->xav_arylen
69#define AvFLAGS(av)     ((XPVAV*)  SvANY(av))->xav_flags
70
71#define AvREAL(av)      (AvFLAGS(av) & AVf_REAL)
72#define AvREAL_on(av)   (AvFLAGS(av) |= AVf_REAL)
73#define AvREAL_off(av)  (AvFLAGS(av) &= ~AVf_REAL)
74#define AvREIFY(av)     (AvFLAGS(av) & AVf_REIFY)
75#define AvREIFY_on(av)  (AvFLAGS(av) |= AVf_REIFY)
76#define AvREIFY_off(av) (AvFLAGS(av) &= ~AVf_REIFY)
77#define AvREUSED(av)    (AvFLAGS(av) & AVf_REUSED)
78#define AvREUSED_on(av) (AvFLAGS(av) |= AVf_REUSED)
79#define AvREUSED_off(av) (AvFLAGS(av) &= ~AVf_REUSED)
80
81#define AvREALISH(av)   (AvFLAGS(av) & (AVf_REAL|AVf_REIFY))
82                                         
83#define AvFILL(av)      ((SvRMAGICAL((SV *) (av))) \
84                          ? mg_size((SV *) av) : AvFILLp(av))
85
Note: See TracBrowser for help on using the repository browser.