diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentFileChannelHeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentFileChannelHeapMap.java index b36d1017..2a3e93aa 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentFileChannelHeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentFileChannelHeapMap.java @@ -73,6 +73,17 @@ public class ConcurrentFileChannelHeapMap implements LpMap return concurrentHeapMap.getIncrementIndex(); } + @Override + public void clear() { + fileChannelLock.lock(); + try { + fileChannelMap.clear(); + concurrentHeapMap.clear(); + } finally { + fileChannelLock.unlock(); + } + } + private void load() { var maxIndex = fileChannelMap.getMaxIndex(); if (maxIndex <= 0) { diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentHeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentHeapMap.java index 0bf7cf07..cf4b7851 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentHeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/ConcurrentHeapMap.java @@ -69,6 +69,12 @@ public class ConcurrentHeapMap implements LpMap { return maxIndexAtomic.incrementAndGet(); } + @Override + public void clear() { + map.clear(); + maxIndexAtomic.set(0); + } + @Override public void forEach(BiConsumer biConsumer) { map.forEach(biConsumer); diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelHeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelHeapMap.java index 27b1066e..ca276e95 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelHeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelHeapMap.java @@ -60,6 +60,12 @@ public class FileChannelHeapMap implements LpMap { return heapMap.getIncrementIndex(); } + @Override + public void clear() { + fileChannelMap.clear(); + heapMap.clear(); + } + private void load() { var maxIndex = fileChannelMap.getMaxIndex(); if (maxIndex <= 0) { diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java index 199334c1..11a23ba9 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/FileChannelMap.java @@ -156,6 +156,17 @@ public class FileChannelMap implements LpMap, Closeable { return maxIndex; } + @Override + public void clear() { + try { + setMaxIndex(0); + dbFileRandomAccess.setLength(0); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + protected void setKeyValue(long key, V value) { try { clearByteBuf(); diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java index 321c0894..1f2222dd 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/FileHeapMap.java @@ -82,6 +82,12 @@ public class FileHeapMap implements LpMap { return heapMap.getIncrementIndex(); } + @Override + public void clear() { + heapMap.clear(); + save(); + } + private void load() { FileInputStream fileInputStream = null; FileChannel fileChannel = null; diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/HeapMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/HeapMap.java index 6589d73b..9c0db287 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/HeapMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/HeapMap.java @@ -70,6 +70,12 @@ public class HeapMap implements LpMap { return maxIndex; } + @Override + public void clear() { + maxIndex = 0; + map.clear(); + } + @Override public void forEach(BiConsumer biConsumer) { map.forEach(biConsumer); diff --git a/orm/src/main/java/com/zfoo/orm/lpmap/LpMap.java b/orm/src/main/java/com/zfoo/orm/lpmap/LpMap.java index 52bc1890..e48bcf9a 100644 --- a/orm/src/main/java/com/zfoo/orm/lpmap/LpMap.java +++ b/orm/src/main/java/com/zfoo/orm/lpmap/LpMap.java @@ -42,6 +42,8 @@ public interface LpMap { long getIncrementIndex(); + void clear(); + default void checkKey(long key) { if (key <= 0) { throw new RunException("key[{}]不能为负数或0", key);