home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / mg.h < prev    next >
C/C++ Source or Header  |  2000-02-25  |  1KB  |  51 lines

  1. /*    mg.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.  
  10. #ifdef STRUCT_MGVTBL_DEFINITION
  11. STRUCT_MGVTBL_DEFINITION;
  12. #else
  13. struct mgvtbl {
  14.     int        (CPERLscope(*svt_get))    (pTHX_ SV *sv, MAGIC* mg);
  15.     int        (CPERLscope(*svt_set))    (pTHX_ SV *sv, MAGIC* mg);
  16.     U32        (CPERLscope(*svt_len))    (pTHX_ SV *sv, MAGIC* mg);
  17.     int        (CPERLscope(*svt_clear))(pTHX_ SV *sv, MAGIC* mg);
  18.     int        (CPERLscope(*svt_free))    (pTHX_ SV *sv, MAGIC* mg);
  19. };
  20. #endif
  21.  
  22. struct magic {
  23.     MAGIC*    mg_moremagic;
  24.     MGVTBL*    mg_virtual;    /* pointer to magic functions */
  25.     U16        mg_private;
  26.     char    mg_type;
  27.     U8        mg_flags;
  28.     SV*        mg_obj;
  29.     char*    mg_ptr;
  30.     I32        mg_len;
  31. };
  32.  
  33. #define MGf_TAINTEDDIR 1
  34. #define MGf_REFCOUNTED 2
  35. #define MGf_GSKIP      4
  36.  
  37. #define MGf_MINMATCH   1
  38.  
  39. #define MgTAINTEDDIR(mg)    (mg->mg_flags & MGf_TAINTEDDIR)
  40. #define MgTAINTEDDIR_on(mg)    (mg->mg_flags |= MGf_TAINTEDDIR)
  41. #define MgTAINTEDDIR_off(mg)    (mg->mg_flags &= ~MGf_TAINTEDDIR)
  42.  
  43. #define MgPV(mg,lp)        ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ?   \
  44.                  SvPV((SV*)((mg)->mg_ptr),lp) :        \
  45.                  (mg)->mg_ptr)
  46.  
  47. #define SvTIED_mg(sv,how) \
  48.     (SvRMAGICAL(sv) ? mg_find((sv),(how)) : Null(MAGIC*))
  49. #define SvTIED_obj(sv,mg) \
  50.     ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
  51.