anchor.diff:  get_sticky_entries(#rt_t{nodes=Nodes}) ->
       util:gb_trees_foldl(fun(_K, #rt_entry{type=sticky} = E, Acc) -> [E|Acc];
                         (_,_,Acc) -> Acc
  -                  end, [], Nodes)
  -    .
  +                  end, [], Nodes).
   
   % @doc Check if a node exists in the routing table
   -spec entry_exists(EntryKey :: key(), rt()) -> boolean().
  
positive.code:     end
      .
  
  %% @doc Set up a set of subscriptions from a routing table
  -spec add_fd(RT :: rt())  -> ok.
  add_fd(#rt_t{} = RT) ->
      NewPids = to_pid_list(RT),
      fd:subscribe(NewPids).
  
  %% @doc Update subscriptions
  -spec update_fd(OldRT :: rt(), NewRT :: rt()) -> ok.
  update_fd(OldRT, OldRT) -> ok;
  update_fd(#rt_t{} = OldRT, #rt_t{} = NewRT) ->
      OldPids = to_pid_list(OldRT),
      NewPids = to_pid_list(NewRT),
      fd:update_subscriptions(OldPids, NewPids).
  
  %% userdevguide-end rt_frtchord:check
  
negative.code: to_pid_list(RT) -> [node:pidX(N) || N <- internal_to_list(RT)].
  %% userdevguide-end rt_frtchord:to_pid_list
  
  %% @doc Get the size of the RT excluding entries which are not tagged as normal entries.
  -spec get_size_without_special_nodes(rt()) -> non_neg_integer().
  get_size_without_special_nodes(#rt_t{} = RT) ->
      util:gb_trees_foldl(
          fun(_Key, Val, Acc) ->
                  Acc + case entry_type(Val) of
                      normal -> 1; % TODO must include group nodes in GFRT
                      _else -> 0
                  end
          end, 0, get_rt_tree(RT)).
  
  %% userdevguide-begin rt_frtchord:get_size
  %% @doc Returns the size of the routing table.
  -spec get_size(rt() | external_rt()) -> non_neg_integer().
  get_size(#rt_t{} = RT) -> gb_trees:size(get_rt_tree(RT));
  get_size(RT) -> gb_trees:size(RT). % size of external rt
  %% userdevguide-end rt_frtchord:get_size
  
  