anchor.diff:  %% @doc Filter function for subscriptions that returns true if a
   %%      direct neighbor, i.e. pred, succ or base node, changed or a slide
   %%      operation finished.
  --spec subscribe_dneighbor_change_slide_filter(OldNeighbors::nodelist:neighborhood(), NewNeighbors::nodelist:neighborhood(), IsSlide::slide()) -> boolean().
  -subscribe_dneighbor_change_slide_filter(OldNeighbors, NewNeighbors, IsSlide) ->
  -    IsSlide =/= none orelse
  +-spec subscribe_dneighbor_change_slide_filter(OldNeighbors::nodelist:neighborhood(), NewNeighbors::nodelist:neighborhood(), SlideType::slide()) -> boolean().
  +subscribe_dneighbor_change_slide_filter(OldNeighbors, NewNeighbors, SlideType) ->
  +    SlideType =/= none orelse
           nodelist:node(OldNeighbors) =/= nodelist:node(NewNeighbors) orelse
           nodelist:pred(OldNeighbors) =/= nodelist:pred(NewNeighbors) orelse
           nodelist:succ(OldNeighbors) =/= nodelist:succ(NewNeighbors).
  
positive.code: 
  %% @doc Filter function for subscriptions that returns true if a
  %%      direct neighbor, i.e. pred, succ or base node, changed.
  -spec subscribe_dneighbor_change_filter(OldNeighbors::nodelist:neighborhood(), NewNeighbors::nodelist:neighborhood(), IsSlide::slide()) -> boolean().
  subscribe_dneighbor_change_filter(OldNeighbors, NewNeighbors, _IsSlide) ->
      nodelist:node(OldNeighbors) =/= nodelist:node(NewNeighbors) orelse
          nodelist:pred(OldNeighbors) =/= nodelist:pred(NewNeighbors) orelse
          nodelist:succ(OldNeighbors) =/= nodelist:succ(NewNeighbors).
  
negative.code: %% @doc Sends a message to the local node's dht_node process notifying
  %%      it of a finished slide.
  -spec notify_slide_finished(slide()) -> ok.
  notify_slide_finished(SlideType) ->
      Pid = pid_groups:get_my(dht_node),
      comm:send_local(Pid, {rm, notify_slide_finished, SlideType}).
  
  %% @doc Updates a dht node's id and sends the ring maintenance a message about
  %%      the change.
  