anchor.diff:  -export([new/2,
            write/2,
            read/2,
  +         read/3,
            skip/2,
            flush_transport/1,
            close_transport/1,
  
positive.code: 
  %% Structure is like:
  %%    [{Fid, Type}, ...]
  read(IProto, {struct, Structure}) when is_list(Structure) ->
      IndexList = case length(Structure) of
                      N when N > 0 -> lists:seq(1, N);
                      _ -> []
                  end,
  
  
negative.code:     % Fid -> {Type, Index}
      SDict = dict:from_list(SWithIndices),
  
      ok = read(IProto, struct_begin),
      RTuple0 = erlang:make_tuple(length(Structure) + Offset, undefined),
      RTuple1 = if Tag =/= undefined -> setelement(1, RTuple0, Tag);
                   true              -> RTuple0
                end,
  
      RTuple2 = read_struct_loop(IProto, SDict, RTuple1),
      {ok, RTuple2}.
  
  read(IProto, {struct, {Module, StructureName}}) when is_atom(Module),
                                                       is_atom(StructureName) ->
      read(IProto, Module:struct_info(StructureName), StructureName);
  
  read(IProto, S={struct, Structure}) when is_list(Structure) ->
      read(IProto, S, undefined);
  
  read(IProto, {list, Type}) ->
      #protocol_list_begin{etype = EType, size = Size} =
  