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.