diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2014-02-26 16:40:43 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2014-02-26 16:40:43 +0000 |
| commit | f568aafc19c3e7fc5e7226c25e7a91df7eeef33d (patch) | |
| tree | 785c8ddf2a2a56fb028c790ec845d5b4fac831c4 /src/dtree.erl | |
| parent | b1b04a6bc2c9848810db538c26665206506a9e8c (diff) | |
| parent | 403bbedce9f9c32663cd8ff45de3df9055d8998e (diff) | |
| download | rabbitmq-server-git-f568aafc19c3e7fc5e7226c25e7a91df7eeef33d.tar.gz | |
stable to default
Diffstat (limited to 'src/dtree.erl')
| -rw-r--r-- | src/dtree.erl | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/dtree.erl b/src/dtree.erl index 5ff36bd922..72abe248f5 100644 --- a/src/dtree.erl +++ b/src/dtree.erl @@ -32,7 +32,7 @@ -module(dtree). --export([empty/0, insert/4, take/3, take/2, take_all/2, +-export([empty/0, insert/4, take/3, take/2, take_all/2, drop/2, is_defined/2, is_empty/1, smallest/1, size/1]). %%---------------------------------------------------------------------------- @@ -53,6 +53,7 @@ -spec(take/3 :: ([pk()], sk(), ?MODULE()) -> {[kv()], ?MODULE()}). -spec(take/2 :: (sk(), ?MODULE()) -> {[kv()], ?MODULE()}). -spec(take_all/2 :: (sk(), ?MODULE()) -> {[kv()], ?MODULE()}). +-spec(drop/2 :: (pk(), ?MODULE()) -> ?MODULE()). -spec(is_defined/2 :: (sk(), ?MODULE()) -> boolean()). -spec(is_empty/1 :: (?MODULE()) -> boolean()). -spec(smallest/1 :: (?MODULE()) -> kv()). @@ -120,6 +121,14 @@ take_all(SK, {P, S}) -> {KVs, {P1, prune(SKS, PKS, S)}} end. +%% Drop all entries for the given primary key (which does not have to exist). +drop(PK, {P, S}) -> + case gb_trees:lookup(PK, P) of + none -> {P, S}; + {value, {SKS, _V}} -> {gb_trees:delete(PK, P), + prune(SKS, gb_sets:singleton(PK), S)} + end. + is_defined(SK, {_P, S}) -> gb_trees:is_defined(SK, S). is_empty({P, _S}) -> gb_trees:is_empty(P). |
