anchor.diff:          inlineComposite -> Count + 1;
           Bits -> 1 + (((Count * Bits) - 1) div 64)
       end;
  -ref_data_size({Kind, DSize, PSize})
  -  when Kind == struct_ref; Kind == interface_ref ->
  -    DSize + PSize.
  +ref_data_size(#struct_ref{ dsize=DSize, psize=PSize }) -> DSize + PSize.
   
   ptr_type(0, 0) -> null;
   ptr_type(Offset, _) ->
  
positive.code: -spec read_struct_data(integer(), integer(), ref(), any()) -> binary() | any().
  read_struct_data(_, _, #ref{ kind=null }, Default) -> Default;
  read_struct_data(Align, Len,
                   #ref{ kind={Kind, DSize, _}}=Ref,
                   Default)
    when Kind == struct_ref; Kind == interface_ref ->
      if Align + Len =< DSize * 64 ->
              <<_:Align/bits, Value:Len/bits, _/bits>>
                  = read(1 + ((Align + Len - 1) div 64), Ref),
  
negative.code:     read_list_element_bits(Next, Left - 1, Count - 1, Rest, [Bit|Acc]).
  
  copy_ref(#ref{ kind=null }=Ref) -> {Ref, 0, []};
  copy_ref(#ref{ kind=#struct_ref{ dsize=DSize, psize=PSize } }=Ref) ->
      StructData = read_struct_data(0, DSize * 64, Ref),
      StructPtrs = [copy_ref(read_struct_ptr(Idx, Ref))
                    || Idx <- lists:seq(0, PSize - 1)],
  