X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Size.xs;h=02c16c33aacbf8a0f39a34175795a2d01200f32b;hb=b98fcdb93f447c4f556f859c61b15c5fdd502bee;hp=33699d17205a438d281ef8bc3663551fdeaed86d;hpb=0bff12d84a7bba010da7e689e45b0311f274c276;p=p5sagit%2FDevel-Size.git diff --git a/Size.xs b/Size.xs index 33699d1..02c16c3 100644 --- a/Size.xs +++ b/Size.xs @@ -153,8 +153,7 @@ UV thing_size(SV *orig_thing, HV *tracking_hash) { if (cur_entry->hent_hek) { /* Hash keys can be shared. Have we seen this before? */ if (check_new(tracking_hash, cur_entry->hent_hek)) { - total_size += sizeof(HEK); - total_size += cur_entry->hent_hek->hek_len - 1; + total_size += HEK_BASESIZE + cur_entry->hent_hek->hek_len + 2; } } cur_entry = cur_entry->hent_next; @@ -199,9 +198,10 @@ UV thing_size(SV *orig_thing, HV *tracking_hash) { return total_size; } - MODULE = Devel::Size PACKAGE = Devel::Size +PROTOTYPES: DISABLE + IV size(orig_thing) SV *orig_thing @@ -234,6 +234,9 @@ CODE: /* Hash to track our seen pointers */ HV *tracking_hash = newHV(); AV *pending_array = newAV(); + IV size = 0; + + IV count = 0; /* Size starts at zero */ RETVAL = 0; @@ -317,11 +320,15 @@ CODE: } } - RETVAL += thing_size(thing, tracking_hash); + + size = thing_size(thing, tracking_hash); + RETVAL += size; + // printf("added thing of size %i, thing #%i\n", size, count++); } } /* Clean up after ourselves */ + // printf("For info, refcounts are %i, %i\n", SvREFCNT(tracking_hash), SvREFCNT(pending_array)); SvREFCNT_dec(tracking_hash); SvREFCNT_dec(pending_array); }