This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add "profile installman" to the TODO.
[perl5.git] / av.h
... / ...
CommitLineData
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#define _XPVAV_ALLOCATED_HEAD \
12 SSize_t xav_fill; /* Index of last element present */ \
13 SSize_t xav_max /* max index for which array has space */
14
15#define _XPVAV_HEAD \
16 union _xnvu xnv_u; \
17 _XPVAV_ALLOCATED_HEAD
18
19struct xpvav {
20 _XPVAV_HEAD;
21 _XPVMG_HEAD;
22};
23
24typedef struct {
25 _XPVAV_ALLOCATED_HEAD;
26 _XPVMG_HEAD;
27} xpvav_allocated;
28
29#undef _XPVAV_ALLOCATED_HEAD
30#undef _XPVAV_HEAD
31
32/* SV** xav_alloc; */
33#define xav_alloc xiv_u.xivu_p1
34/* SV* xav_arylen; */
35
36/* SVpav_REAL is set for all AVs whose xav_array contents are refcounted.
37 * Some things like "@_" and the scratchpad list do not set this, to
38 * indicate that they are cheating (for efficiency) by not refcounting
39 * the AV's contents.
40 *
41 * SVpav_REIFY is only meaningful on such "fake" AVs (i.e. where SVpav_REAL
42 * is not set). It indicates that the fake AV is capable of becoming
43 * real if the array needs to be modified in some way. Functions that
44 * modify fake AVs check both flags to call av_reify() as appropriate.
45 *
46 * Note that the Perl stack and @DB::args have neither flag set. (Thus,
47 * items that go on the stack are never refcounted.)
48 *
49 * These internal details are subject to change any time. AV
50 * manipulations external to perl should not care about any of this.
51 * GSAR 1999-09-10
52 */
53
54/*
55=head1 Handy Values
56
57=for apidoc AmU||Nullav
58Null AV pointer.
59
60(deprecated - use C<(AV *)NULL> instead)
61
62=head1 Array Manipulation Functions
63
64=for apidoc Am|int|AvFILL|AV* av
65Same as C<av_len()>. Deprecated, use C<av_len()> instead.
66
67=cut
68*/
69
70#ifndef PERL_CORE
71# define Nullav Null(AV*)
72#endif
73
74#define AvARRAY(av) ((av)->sv_u.svu_array)
75#define AvALLOC(av) (*((SV***)&((XPVAV*) SvANY(av))->xav_alloc))
76#define AvMAX(av) ((XPVAV*) SvANY(av))->xav_max
77#define AvFILLp(av) ((XPVAV*) SvANY(av))->xav_fill
78#define AvARYLEN(av) (*Perl_av_arylen_p(aTHX_ (AV*)av))
79
80#define AvREAL(av) (SvFLAGS(av) & SVpav_REAL)
81#define AvREAL_on(av) (SvFLAGS(av) |= SVpav_REAL)
82#define AvREAL_off(av) (SvFLAGS(av) &= ~SVpav_REAL)
83#define AvREAL_only(av) (AvREIFY_off(av), SvFLAGS(av) |= SVpav_REAL)
84#define AvREIFY(av) (SvFLAGS(av) & SVpav_REIFY)
85#define AvREIFY_on(av) (SvFLAGS(av) |= SVpav_REIFY)
86#define AvREIFY_off(av) (SvFLAGS(av) &= ~SVpav_REIFY)
87#define AvREIFY_only(av) (AvREAL_off(av), SvFLAGS(av) |= SVpav_REIFY)
88
89#define AvREALISH(av) (SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY))
90
91#define AvFILL(av) ((SvRMAGICAL((SV *) (av))) \
92 ? mg_size((SV *) av) : AvFILLp(av))
93
94#define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES"
95
96/*
97=for apidoc newAV
98
99Creates a new AV. The reference count is set to 1.
100
101=cut
102*/
103
104#define newAV() ((AV *)newSV_type(SVt_PVAV))
105
106/*
107 * Local variables:
108 * c-indentation-style: bsd
109 * c-basic-offset: 4
110 * indent-tabs-mode: t
111 * End:
112 *
113 * ex: set ts=8 sts=4 sw=4 noet:
114 */