anchor.diff:  table(N, Q) ->
       X = lists:nth(N, Q#rrd.archives),
       X#archive.points.
  +
  +load(Key) when is_list(Key) ->
  +    load(list_to_binary(Key));
  +load(Key) ->
  +    Path = path_from_key(Key),
  +    case file:read_file(Path) of
  +        {ok, Binary} ->  {ok, binary_to_term(Binary)};
  +        {error, _} ->  {error, not_found}
  +    end.
  +
  +save(Key, {Type, RRD}) ->
  +    Path = path_from_key(Key),
  +    filelib:ensure_dir(Path),
  +    file:write_file(Path, term_to_binary({Type, RRD})).
   
   %% @doc
   %% Neighbour values are the points we need to aggregate
  
positive.code:         true -> divisibility_check([H2 | T]);
          false -> false
      end.
  
negative.code: -define(SECONDS_FROM_GREGORIAN_BASE_TO_EPOCH,
           (?DAYS_FROM_GREGORIAN_BASE_TO_EPOCH * 24*60*60)).
  
  new(Retentions) ->
      new(Retentions, []).
  
  new(Retentions, Opts) ->
      Xff = ?pval(xff, Opts, 0.5),
      Consolidation = ?pval(consolidation, Opts, average),
      Divisible = divisibility_check(Retentions),
  
      case Divisible of
          true ->
              Archives = lists:map(fun({Step, Size}) -> #archive{step=Step, size=Size} end, Retentions),
              #rrd{archives=Archives, consolidation=Consolidation, xff=Xff};
          false ->
              {error, not_divisible}
  