From fb970d92bc737afe34e23a0667b1737c6b105fde Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Sun, 2 Aug 2015 02:09:48 +0200
Subject: Fix Bitfield.put(..): Return previous value

---
 src/java/jogamp/common/util/Int32ArrayBitfield.java | 14 +++++++++-----
 src/java/jogamp/common/util/Int32Bitfield.java      | 14 +++++++++-----
 src/java/jogamp/common/util/SyncedBitfield.java     |  4 ++--
 3 files changed, 20 insertions(+), 12 deletions(-)

(limited to 'src/java/jogamp/common/util')

diff --git a/src/java/jogamp/common/util/Int32ArrayBitfield.java b/src/java/jogamp/common/util/Int32ArrayBitfield.java
index 3dcb9ae..5bc95eb 100644
--- a/src/java/jogamp/common/util/Int32ArrayBitfield.java
+++ b/src/java/jogamp/common/util/Int32ArrayBitfield.java
@@ -142,16 +142,20 @@ public class Int32ArrayBitfield implements Bitfield {
     }
 
     @Override
-    public final void put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
+    public final boolean put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
         check(bitSize, bitnum);
         final int u = bitnum >>> UNIT_SHIFT;
         final int b = bitnum - ( u << UNIT_SHIFT );
         final int m = 1 << b;
-        if( bit ) {
-            storage[u] |=  m;
-        } else {
-            storage[u] &= ~m;
+        final boolean prev = 0 != ( storage[u] & m ) ;
+        if( prev != bit ) {
+            if( bit ) {
+                storage[u] |=  m;
+            } else {
+                storage[u] &= ~m;
+            }
         }
+        return prev;
     }
     @Override
     public final void set(final int bitnum) throws IndexOutOfBoundsException {
diff --git a/src/java/jogamp/common/util/Int32Bitfield.java b/src/java/jogamp/common/util/Int32Bitfield.java
index 9bf2117..7b55a59 100644
--- a/src/java/jogamp/common/util/Int32Bitfield.java
+++ b/src/java/jogamp/common/util/Int32Bitfield.java
@@ -115,14 +115,18 @@ public class Int32Bitfield implements Bitfield {
         return 0 != ( storage & ( 1 << bitnum ) ) ;
     }
     @Override
-    public final void put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
+    public final boolean put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
         check(UNIT_SIZE, bitnum);
         final int m = 1 << bitnum;
-        if( bit ) {
-            storage |=  m;
-        } else {
-            storage &= ~m;
+        final boolean prev = 0 != ( storage & m ) ;
+        if( prev != bit ) {
+            if( bit ) {
+                storage |=  m;
+            } else {
+                storage &= ~m;
+            }
         }
+        return prev;
     }
     @Override
     public final void set(final int bitnum) throws IndexOutOfBoundsException {
diff --git a/src/java/jogamp/common/util/SyncedBitfield.java b/src/java/jogamp/common/util/SyncedBitfield.java
index c23d7ea..49c27b0 100644
--- a/src/java/jogamp/common/util/SyncedBitfield.java
+++ b/src/java/jogamp/common/util/SyncedBitfield.java
@@ -70,8 +70,8 @@ public class SyncedBitfield implements Bitfield {
     }
 
     @Override
-    public final synchronized void put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
-        impl.put(bitnum, bit);
+    public final synchronized boolean put(final int bitnum, final boolean bit) throws IndexOutOfBoundsException {
+        return impl.put(bitnum, bit);
     }
 
     @Override
-- 
cgit v1.2.3