X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hv.h;h=468c072bf05df073eed747fcd0a4ccd305b5225c;hb=842c41230043ce99d4bf7b2c79aed85ce2908e89;hp=9322377f2d75110bd73d547e3890bcd85892a668;hpb=44b87b5061968d098b3906ca4b5e6f94469c8694;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hv.h b/hv.h index 9322377..468c072 100644 --- a/hv.h +++ b/hv.h @@ -80,31 +80,15 @@ struct xpvhv_aux { struct mro_meta *xhv_mro_meta; }; -#define _XPVHV_ALLOCATED_HEAD \ - STRLEN xhv_fill; /* how full xhv_array currently is */ \ - STRLEN xhv_max /* subscript of last element of xhv_array */ - -#define _XPVHV_HEAD \ - union _xnvu xnv_u; \ - _XPVHV_ALLOCATED_HEAD - /* hash structure: */ /* This structure must match the beginning of struct xpvmg in sv.h. */ struct xpvhv { - _XPVHV_HEAD; - _XPVMG_HEAD; + HV* xmg_stash; /* class package */ + union _xmgu xmg_u; + STRLEN xhv_keys; /* total keys, including placeholders */ + STRLEN xhv_max; /* subscript of last element of xhv_array */ }; -#define xhv_keys xiv_u.xivu_iv - -typedef struct { - _XPVHV_ALLOCATED_HEAD; - _XPVMG_HEAD; -} xpvhv_allocated; - -#undef _XPVHV_ALLOCATED_HEAD -#undef _XPVHV_HEAD - /* hash a key */ /* FYI: This is the "One-at-a-Time" algorithm by Bob Jenkins * from requirements by Colin Plumb. @@ -220,7 +204,7 @@ If you are using C to get values to pass to C to create a new SV, you should consider using C as it is more efficient. -=for apidoc Am|char*|HeUTF8|HE* he|STRLEN len +=for apidoc Am|char*|HeUTF8|HE* he Returns whether the C value returned by C is encoded in UTF-8, doing any necessary dereferencing of possibly C keys. The value returned will be 0 or non-0, not necessarily 1 (or even a value with any low bits set), @@ -250,7 +234,7 @@ C. # define Nullhv Null(HV*) #endif #define HvARRAY(hv) ((hv)->sv_u.svu_hash) -#define HvFILL(hv) ((XPVHV*) SvANY(hv))->xhv_fill +#define HvFILL(hv) Perl_hv_fill(aTHX_ (const HV *)(hv)) #define HvMAX(hv) ((XPVHV*) SvANY(hv))->xhv_max /* This quite intentionally does no flag checking first. That's your responsibility. */