% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.


% The last element in the ring
-define(RING_END, 2 bsl 31 - 1).


% type specification hacked to suppress dialyzer warning re: match spec
-record(shard, {
    name :: binary() | '_' | 'undefined',
    node :: node() | '_' | 'undefined',
    dbname :: binary() | 'undefined',
    range :: [non_neg_integer() | '$1' | '$2'] | '_' | 'undefined',
    ref :: reference() | '_' | 'undefined',
    opts :: list() | 'undefined'
}).

%% Do not reference outside of mem3.
-record(ordered_shard, {
    name :: binary() | '_',
    node :: node() | '_',
    dbname :: binary(),
    range :: [non_neg_integer() | '$1' | '$2'] | '_',
    ref :: reference() | 'undefined' | '_',
    order :: non_neg_integer() | 'undefined' | '_',
    opts :: list()
}).

%% types
-type join_type() :: init | join | replace | leave.
-type join_order() :: non_neg_integer().
-type options() :: list().
-type mem_node() :: {join_order(), node(), options()}.
-type mem_node_list() :: [mem_node()].
-type arg_options() :: {test, boolean()}.
-type args() :: [] | [arg_options()].
-type test() :: undefined | node().
-type epoch() :: float().
-type clock() :: {node(), epoch()}.
-type vector_clock() :: [clock()].
-type ping_node() :: node() | nil.
-type gossip_fun() :: call | cast.

-type part() :: #shard{}.
-type fullmap() :: [part()].
-type ref_part_map() :: {reference(), part()}.
-type tref() :: reference().
-type np() :: {node(), part()}.
-type beg_acc() :: [integer()].
