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

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