perl 5.003_06: pod/perltrap.pod
[perl.git] / mg.h
1 /*    mg.h
2  *
3  *    Copyright (c) 1991-1994, 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
10 struct mgvtbl {
11     int         (*svt_get)      _((SV *sv, MAGIC* mg));
12     int         (*svt_set)      _((SV *sv, MAGIC* mg));
13     U32         (*svt_len)      _((SV *sv, MAGIC* mg));
14     int         (*svt_clear)    _((SV *sv, MAGIC* mg));
15     int         (*svt_free)     _((SV *sv, MAGIC* mg));
16 };
17
18 struct magic {
19     MAGIC*      mg_moremagic;
20     MGVTBL*     mg_virtual;     /* pointer to magic functions */
21     U16         mg_private;
22     char        mg_type;
23     U8          mg_flags;
24     SV*         mg_obj;
25     char*       mg_ptr;
26     I32         mg_len;
27 };
28
29 #define MGf_TAINTEDDIR 1
30 #define MGf_REFCOUNTED 2
31 #define MGf_GSKIP      4
32
33 #define MGf_MINMATCH   1
34
35 #define MgTAINTEDDIR(mg) (mg->mg_flags & MGf_TAINTEDDIR)
36 #define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
37
38 #define MgPV(mg)                ((mg)->mg_len == HEf_SVKEY) ?   \
39                                 SvPV((SV*)((mg)->mg_ptr),na) :   \
40                                 (mg)->mg_ptr