From 5b48543bbfa188f541999471975ea82f7b30ed8e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 03 Dec 2014 10:58:51 +0000
Subject: [PATCH] OPENDJ-1602 New pluggable storage based backend

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java |   99 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 95 insertions(+), 4 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index 69255c3..d94beea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -58,15 +58,106 @@
   /** A simple class representing a pair of added and deleted indexed IDs. */
   static class BufferedIndexValues
   {
-    EntryIDSet addedIDs;
-    EntryIDSet deletedIDs;
+    private EntryIDSet addedIDs;
+    private EntryIDSet deletedIDs;
+
+    /**
+     * Adds the provided entryID to this object associating it with the provided keyBytes.
+     *
+     * @param keyBytes the keyBytes mapping for this entryID
+     * @param entryID the entryID to add
+     */
+    void addEntryID(ByteString keyBytes, EntryID entryID)
+    {
+      if (!remove(deletedIDs, entryID))
+      {
+        if (this.addedIDs == null)
+        {
+          this.addedIDs = new EntryIDSet(keyBytes, null);
+        }
+        this.addedIDs.add(entryID);
+      }
+    }
+
+    /**
+     * Deletes the provided entryID from this object.
+     *
+     * @param keyBytes the keyBytes mapping for this entryID
+     * @param entryID the entryID to delete
+     */
+    void deleteEntryID(ByteString keyBytes, EntryID entryID)
+    {
+      if (!remove(addedIDs, entryID))
+      {
+        if (this.deletedIDs == null)
+        {
+          this.deletedIDs = new EntryIDSet(keyBytes, null);
+        }
+        this.deletedIDs.add(entryID);
+      }
+    }
+
+    private boolean remove(EntryIDSet ids, EntryID entryID)
+    {
+      if (ids != null && ids.contains(entryID))
+      {
+        ids.remove(entryID);
+        return true;
+      }
+      return false;
+    }
+
   }
 
   /** A simple class representing a pair of added and deleted VLV values. */
   static class BufferedVLVValues
   {
-    TreeSet<SortValues> addedValues;
-    TreeSet<SortValues> deletedValues;
+    private TreeSet<SortValues> addedValues;
+    private TreeSet<SortValues> deletedValues;
+
+    /**
+     * Adds the provided values to this object.
+     *
+     * @param sortValues the values to add
+     */
+    void addValues(SortValues sortValues)
+    {
+      if (!remove(deletedValues, sortValues))
+      {
+        if (this.addedValues == null)
+        {
+          this.addedValues = new TreeSet<SortValues>();
+        }
+        this.addedValues.add(sortValues);
+      }
+    }
+
+    /**
+     * Deletes the provided values from this object.
+     *
+     * @param sortValues the values to delete
+     */
+    void deleteValues(SortValues sortValues)
+    {
+      if (!remove(addedValues, sortValues))
+      {
+        if (this.deletedValues == null)
+        {
+          this.deletedValues = new TreeSet<SortValues>();
+        }
+        this.deletedValues.add(sortValues);
+      }
+    }
+
+    private boolean remove(TreeSet<SortValues> values, SortValues sortValues)
+    {
+      if (values != null && values.contains(sortValues))
+      {
+        values.remove(sortValues);
+        return true;
+      }
+      return false;
+    }
   }
 
   /**

--
Gitblit v1.10.0