You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/05/23 13:14:23 UTC

svn commit: r1126435 - in /incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib: MultiSet.java RefLong.java

Author: andy
Date: Mon May 23 11:14:23 2011
New Revision: 1126435

URL: http://svn.apache.org/viewvc?rev=1126435&view=rev
Log:
Bug fix + enchance MultiSet

Modified:
    incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java
    incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/RefLong.java

Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java?rev=1126435&r1=1126434&r2=1126435&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java Mon May 23 11:14:23 2011
@@ -44,6 +44,14 @@ public class MultiSet<T> implements Iter
     /** Add an object */
     public void add(T obj)          { _get(obj).inc(); multiSetSize++ ; } 
 
+    /** Add an object, with cardinality n */
+    public void add(T obj, long n)
+    { 
+        if ( n <= 0 ) return ;
+        _get(obj).add(n) ;
+        multiSetSize += n ;
+    }
+    
     /** Remove one occurrence of the object from the multiset */
     public void remove(T obj)
     {
@@ -55,10 +63,27 @@ public class MultiSet<T> implements Iter
             map.remove(obj) ;
     }
     
+    /** Remove N occurrences of the object from the multiset */
+    public void remove(T obj, long n)
+    {
+        RefLong x = map.get(obj) ;
+        if ( x == null ) return ;
+        long z = x.value() ;
+        if ( z < n )
+            n = z ;
+        x.subtract(n) ;
+        multiSetSize -= n ;
+        if ( x.value() <= 0 )
+            map.remove(obj) ;
+    }    
+    
+
     /** Remove all occurrences of the object in themultiset */
     public void removeAll(T obj)
     {
         RefLong x = map.get(obj) ;
+        if ( x == null )
+            return ;
         multiSetSize -= x.value() ;
         map.remove(obj) ;
     }

Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/RefLong.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/RefLong.java?rev=1126435&r1=1126434&r2=1126435&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/RefLong.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/RefLong.java Mon May 23 11:14:23 2011
@@ -9,20 +9,22 @@ package org.openjena.atlas.lib;
 public final class RefLong
 {
     private long value ;
-    public RefLong() { this(0) ; }
-    public RefLong(long v) { value = v ; }
-    public long value()     { return value ; }
-    public void inc()       { value++ ; } 
-    public void dec()       { --value ; }
-    public long getAndInc() { return value++ ; }
-    public long incAndGet() { return ++value ; }
-    public long getAndDec() { return value-- ; }
-    public long decAndGet() { return --value ; }
-    public void add(long v) { value += v ; }
-    public void set(long v) { value = v ; }
+    public RefLong()                { this(0) ; }
+    public RefLong(long v)          { value = v ; }
+    public long value()             { return value ; }
+    public void inc()               { value++ ; } 
+    public void dec()               { --value ; }
+    public long getAndInc()         { return value++ ; }
+    public long incAndGet()         { return ++value ; }
+    public long getAndDec()         { return value-- ; }
+    public long decAndGet()         { return --value ; }
+    public void add(long v)         { value += v ; }
+    public void subtract(long v)    { value -= v ; }
+    public void set(long v)         { value = v ; }
     @Override public String toString() { return "Ref:"+Long.toString(value) ; } 
     // hashCode and equals are Object equality - this is a mutable object
 }
+
 /*
  * (c) Copyright 2011 Epimorphics Ltd.
  * All rights reserved.