X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Size.xs;h=02c16c33aacbf8a0f39a34175795a2d01200f32b;hb=b98fcdb93f447c4f556f859c61b15c5fdd502bee;hp=43b45cee30da7b1777287f11a45333927e21119f;hpb=fea63ffab1b34bbefc1f75a7beee2c5bdc96d67e;p=p5sagit%2FDevel-Size.git diff --git a/Size.xs b/Size.xs index 43b45ce..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; @@ -235,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; @@ -318,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); }