home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 December / PCpro_2006_12.ISO / ossdvd / server / Perl2 / lib / core / mg.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-29  |  1.7 KB  |  55 lines

  1. /*    mg.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.  
  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.     int        (CPERLscope(*svt_copy))    (pTHX_ SV *sv, MAGIC* mg,
  20.                         SV *nsv, const char *name, int namlen);
  21.     int        (CPERLscope(*svt_dup))    (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
  22. };
  23. #endif
  24.  
  25. struct magic {
  26.     MAGIC*    mg_moremagic;
  27.     MGVTBL*    mg_virtual;    /* pointer to magic functions */
  28.     U16        mg_private;
  29.     char    mg_type;
  30.     U8        mg_flags;
  31.     SV*        mg_obj;
  32.     char*    mg_ptr;
  33.     I32        mg_len;
  34. };
  35.  
  36. #define MGf_TAINTEDDIR 1        /* PERL_MAGIC_envelem only */
  37. #define MGf_MINMATCH   1        /* PERL_MAGIC_regex_global only */
  38. #define MGf_REFCOUNTED 2
  39. #define MGf_GSKIP      4
  40. #define MGf_COPY       8
  41. #define MGf_DUP        16
  42.  
  43. #define MgTAINTEDDIR(mg)    (mg->mg_flags & MGf_TAINTEDDIR)
  44. #define MgTAINTEDDIR_on(mg)    (mg->mg_flags |= MGf_TAINTEDDIR)
  45. #define MgTAINTEDDIR_off(mg)    (mg->mg_flags &= ~MGf_TAINTEDDIR)
  46.  
  47. #define MgPV(mg,lp)        ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ?   \
  48.                  SvPV((SV*)((mg)->mg_ptr),lp) :        \
  49.                  (mg)->mg_ptr)
  50.  
  51. #define SvTIED_mg(sv,how) \
  52.     (SvRMAGICAL(sv) ? mg_find((sv),(how)) : Null(MAGIC*))
  53. #define SvTIED_obj(sv,mg) \
  54.     ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
  55.