diff --git a/include/pure_type.hrl b/include/pure_type.hrl index 828c0aa..c227a7e 100644 --- a/include/pure_type.hrl +++ b/include/pure_type.hrl @@ -1,3 +1,13 @@ -define(AA, keep_op1_add_op2). -define(AR, keep_op1_dont_add_op2). -define(RA, remove_op1_add_op2). + +-define(PURE_AWSET_TYPE, pure_awset). +-define(PURE_DWFLAG_TYPE, pure_dwflag). +-define(PURE_EWFLAG_TYPE, pure_ewflag). +-define(PURE_GCOUNTER_TYPE, pure_gcounter). +-define(PURE_GSET_TYPE, pure_gset). +-define(PURE_MVREGISTER_TYPE, pure_mvregister). +-define(PURE_PNCOUNTER_TYPE, pure_pncounter). +-define(PURE_RWSET_TYPE, pure_rwset). +-define(PURE_TWOPSET_TYPE, pure_twopset). \ No newline at end of file diff --git a/src/pure_type.erl b/src/pure_type.erl index 5810d47..eebe129 100644 --- a/src/pure_type.erl +++ b/src/pure_type.erl @@ -23,6 +23,8 @@ -module(pure_type). -author("Georges Younes "). +-include("pure_type.hrl"). + -export_type([pure_type/0, crdt/0, polog/0, @@ -30,6 +32,7 @@ element/0]). -export([reset/2]). +-export([crdt_size/1]). %% Define some initial types. -type pure_type() :: pure_awset | @@ -61,3 +64,26 @@ reset(VV, {Type, {POLog, _Crystal}}) -> POLog ), {Type, {POLog1, Crystal}}. + +-define(AWSET_TYPE, pure_awset). +-define(DWFLAG_TYPE, pure_dwflag). +-define(EWFLAG_TYPE, pure_ewflag). +-define(GCOUNTER_TYPE, pure_gcounter). +-define(GSET_TYPE, pure_gset). +-define(MVREGISTER_TYPE, pure_mvregister). +-define(PNCOUNTER_TYPE, pure_pncounter). +-define(RWSET_TYPE, pure_rwset). +-define(TWOPSET_TYPE, pure_twopset). + +%% @doc Term size. +crdt_size({?PURE_AWSET_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_DWFLAG_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_EWFLAG_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_GCOUNTER_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_GSET_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_MVREGISTER_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_RWSET_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_PNCOUNTER_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size({?PURE_TWOPSET_TYPE, CRDT}) -> crdt_size(CRDT); +crdt_size(T) -> + erts_debug:flat_size(T).