anchor.diff:  -define(SELECT_CHUNK, 1000).
   
   %% list(state()) -> [Key :: binary()]
  +list(#state{table=Table}) ->
  +    accum(Table, fun(K,_) -> {true, K} end).
  +
  +%% list_bucket(state(), Bucket :: atom()) -> [Key :: binary()]
  +list_bucket(#state{table=Table}, Bucket) ->
  +    accum(Table,
  +          fun(_,V) ->
  +                  case binary_to_term(V) of
  +                      {Bucket, Key, _} -> {true, Key};
  +                      _                -> false
  +                  end
  +          end).
  +
  +%% @spec accum(osmos_table(), function()) -> [term()]
  +%% @doc map across the rows in the osmos table, and return
  +%%      terms R for which Fun returns {true, R}
   %% Explanation of osmos:select_range params:
   %%   The three functions are, in order, LessLo, LessHi, and Select.
   %%   We are trying to select *all* keys, not a limited range, thus,
  
positive.code: %%    under riak_osmos_backend_root.
  -module(riak_osmos_backend).
  
  -export([start/1,stop/1,get/2,put/3,list/1,delete/2]).
  -record(state, {table}).
  
  %% @spec start(Partition :: integer()) ->
  
negative.code: get(#state{table=Table}, Key) ->
      case osmos:read(Table, Key) of
          {ok, <<>>}  -> {error, notfound}; %% sentinal for delete
          {ok, Value} ->
              {_,_,RVal} = binary_to_term(Value),
              {ok, RVal};
          not_found   -> {error, notfound}
      end.
  
  %% put(state(), Key :: binary(), Val :: binary()) ->
  %%   ok | {error, Reason :: term()}
  %% key must be 160b
  put(#state{table=Table},{B,K},Key,Val) ->       
      osmos:write(Table, Key, term_to_binary({B,K,Val})).
  
  %% delete(state(), Key :: binary()) ->
  %%   ok | {error, Reason :: term()}
  