From 891255e18e053f54c784cfdeceaca2b27dbd3ec8 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sun, 14 Nov 2021 22:21:32 +0100 Subject: [PATCH] Add more methods --- .../database/collections/DatabaseLong.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseLong.java b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseLong.java index 3a68351..7db4049 100644 --- a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseLong.java +++ b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseLong.java @@ -28,27 +28,43 @@ public class DatabaseLong implements LLKeyValueDatabaseStructure { } public Mono incrementAndGet() { - return incrementAnd(UpdateReturnMode.GET_NEW_VALUE); + return addAnd(1, UpdateReturnMode.GET_NEW_VALUE); } public Mono getAndIncrement() { - return incrementAnd(UpdateReturnMode.GET_OLD_VALUE); + return addAnd(1, UpdateReturnMode.GET_OLD_VALUE); } - private Mono incrementAnd(UpdateReturnMode updateReturnMode) { + public Mono decrementAndGet() { + return addAnd(-1, UpdateReturnMode.GET_NEW_VALUE); + } + + public Mono getAndDecrement() { + return addAnd(-1, UpdateReturnMode.GET_OLD_VALUE); + } + + public Mono addAndGet(long count) { + return addAnd(count, UpdateReturnMode.GET_NEW_VALUE); + } + + public Mono getAndAdd(long count) { + return addAnd(count, UpdateReturnMode.GET_OLD_VALUE); + } + + private Mono addAnd(long count, UpdateReturnMode updateReturnMode) { return singleton.update(prev -> { if (prev != null) { try (var prevBuf = prev.receive()) { var prevLong = prevBuf.readLong(); var alloc = singleton.getAllocator(); var buf = alloc.allocate(Long.BYTES); - buf.writeLong(prevLong + 1); + buf.writeLong(prevLong + count); return buf; } } else { var alloc = singleton.getAllocator(); var buf = alloc.allocate(Long.BYTES); - buf.writeLong(1); + buf.writeLong(count); return buf; } }, updateReturnMode).map(send -> {