anchor.diff:          _ ->
               State
       end.
  +
  +
  +%% @doc Retrieve ring-info
  +%% @private
  +-spec(ring_info(?CUR_RING_TABLE|?PREV_RING_TABLE, #state{}) ->
  +             #ring_info{}).
  +ring_info(?CUR_RING_TABLE, State) ->
  +    State#state.cur;
  +ring_info(?PREV_RING_TABLE, State) ->
  +    State#state.prev;
  +ring_info(_,_) ->
  +    {error, invalid_table}.
  
positive.code:                                   {line, Line}, {body, Msg}])).
  -endif.
  
  
  %%--------------------------------------------------------------------
  %% API
  
negative.code:                                                      Tbl /= ?PREV_RING_TABLE ->
      {reply, {error, invalid_table}, State};
  
  handle_call({lookup, Tbl, AddrId},_From, State) ->
      #ring_info{ring_group_list = RingGroupList,
                 first_vnode_id  = FirstVNodeId,
                 last_vnode_id   = LastVNodeId} = ring_info(Tbl, State),
      Reply = lookup_fun(RingGroupList, FirstVNodeId, LastVNodeId, AddrId),
      {reply, Reply, State};
  
  
  handle_call({first, Tbl},_From, State) when Tbl /= ?CUR_RING_TABLE,
                                              Tbl /= ?PREV_RING_TABLE ->
      {reply, {error, invalid_table}, State};
  handle_call({first, Tbl},_From, State) ->
      #ring_info{ring_group_list = RingGroupList} = ring_info(Tbl, State),
      Reply = first_fun(RingGroupList),
      {reply, Reply, State};
  
  
  handle_call({last, Tbl},_From, State) when Tbl /= ?CUR_RING_TABLE,
                                             Tbl /= ?PREV_RING_TABLE ->
      {reply, {error, invalid_table}, State};
  handle_call({last, Tbl},_From, State) ->
      #ring_info{ring_group_list = RingGroupList} = ring_info(Tbl, State),
      Reply = last_fun(RingGroupList),
      {reply, Reply, State};
  
  
  