anchor.diff:  %%      Begin==End, the whole key range is split in halves.
   %%      Beware: SplitFactor must be in [0, 1]; the final key will be rounded
   %%      down and may thus be Begin.
  --spec get_split_key(Begin::key(), End::key() | ?PLUS_INFINITY_TYPE, SplitFraction::{Num::0..100, Denom::0..100}) -> key().
   get_split_key(Begin, _End, {Num, _Denom}) when Num == 0 -> Begin;
   get_split_key(_Begin, End, {Num, Denom}) when Num == Denom -> End;
   get_split_key(Begin, End, {Num, Denom}) ->
  
positive.code: %% @doc Updates the routing table due to a changed node ID, pred and/or succ.
  %% TODO what should be done here? should we really throw away everything? or trigger
  %rebuild?
  -spec update(OldRT::rt(), OldNeighbors::nodelist:neighborhood(),
               NewNeighbors::nodelist:neighborhood()) -> {ok, rt()}.
  update(_OldRT, _OldNeighbors, NewNeighbors) ->
      {ok, empty(NewNeighbors)}.
  %% userdevguide-end rt_frtchord:update
  
negative.code: is_source(Entry) -> entry_is_of_type(Entry, source).
  is_sticky(Entry) -> entry_is_of_type(Entry, sticky).
  
  entry_nodeid(#rt_entry{node=Node}) -> node:id(Node).
  
  adjacent_pred(#rt_entry{adjacent_fingers={Pred,_Succ}}) -> Pred.
  
  predecessor_node(RT, Node) ->
      gb_trees:get(adjacent_pred(Node), get_rt_tree(RT)).
  
  spacing(Node) -> Node#rt_entry.spacing.
  