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/22 14:20:24 UTC
svn commit: r1125937 - in /incubator/jena/Jena2/ARQ/trunk:
src-test/org/openjena/atlas/lib/TestMultiSet.java
src/org/openjena/atlas/lib/MultiSet.java
Author: andy
Date: Sun May 22 12:20:23 2011
New Revision: 1125937
URL: http://svn.apache.org/viewvc?rev=1125937&view=rev
Log:
Add methods to MultiSet
Modified:
incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/atlas/lib/TestMultiSet.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/lib/MultiSet.java
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/atlas/lib/TestMultiSet.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/atlas/lib/TestMultiSet.java?rev=1125937&r1=1125936&r2=1125937&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/atlas/lib/TestMultiSet.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/atlas/lib/TestMultiSet.java Sun May 22 12:20:23 2011
@@ -74,6 +74,47 @@ public class TestMultiSet extends BaseTe
iterTest(data) ;
}
+ @Test public void multiSet_08()
+ {
+ String[] data = { } ;
+ MultiSet<String> x = add(data) ;
+ assertEquals(0, x.size()) ;
+ }
+
+ @Test public void multiSet_09()
+ {
+ String[] data = { "A", "A" } ;
+ MultiSet<String> x = add(data) ;
+ assertEquals(2, x.size()) ;
+ }
+
+ @Test public void multiSet_10()
+ {
+ String[] data = { "A", "A" } ;
+ MultiSet<String> x = add(data) ;
+ x.remove("A") ;
+ assertEquals(1, x.size()) ;
+ x.remove("A") ;
+ assertEquals(0, x.size()) ;
+ x.remove("A") ;
+ assertEquals(0, x.size()) ;
+ }
+
+ @Test public void multiSet_11()
+ {
+ String[] data = { "A", "A" } ;
+ MultiSet<String> x = add(data) ;
+ long c = Iter.count(x.elements()) ;
+ assertEquals(1, c) ;
+ }
+
+ private static MultiSet<String> add(String[] data)
+ {
+ MultiSet<String> x = new MultiSet<String>() ;
+ for ( String str : data )
+ x.add(str) ;
+ return x ;
+ }
private static void iterTest(String[] data)
{
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=1125937&r1=1125936&r2=1125937&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 Sun May 22 12:20:23 2011
@@ -19,6 +19,8 @@ import java.util.NoSuchElementException
public class MultiSet<T> implements Iterable<T>
{
private Map<T,RefLong> map = new HashMap<T,RefLong>() ;
+ private int multiSetSize = 0 ;
+
private RefLong _get(T obj)
{
RefLong z = map.get(obj) ;
@@ -36,8 +38,11 @@ public class MultiSet<T> implements Iter
/** Does it contain the object? */
public boolean contains(T obj) { return map.containsKey(obj) ; }
+ /** Yiled one object per element (i.e without counts) */
+ public Iterator<T> elements() { return map.keySet().iterator() ; }
+
/** Add an object */
- public void add(T obj) { _get(obj).inc(); }
+ public void add(T obj) { _get(obj).inc(); multiSetSize++ ; }
/** Remove one occurrence of the object from the multiset */
public void remove(T obj)
@@ -45,6 +50,7 @@ public class MultiSet<T> implements Iter
RefLong x = map.get(obj) ;
if ( x == null ) return ;
x.dec() ;
+ multiSetSize-- ;
if ( x.value() == 0 )
map.remove(obj) ;
}
@@ -52,11 +58,13 @@ public class MultiSet<T> implements Iter
/** Remove all occurrences of the object in themultiset */
public void removeAll(T obj)
{
+ RefLong x = map.get(obj) ;
+ multiSetSize -= x.value() ;
map.remove(obj) ;
}
/* Remove everything */
- public void clear() { map.clear() ; }
+ public void clear() { map.clear() ; multiSetSize = 0 ; }
/** Get the count of the number of times the object appears in the multiset - i.e. it's cardinality.
@@ -68,6 +76,21 @@ public class MultiSet<T> implements Iter
return map.get(obj).value() ;
}
+ public int size()
+ {
+// int count = 0 ;
+// for ( Map.Entry<T, RefLong> e : map.entrySet() )
+// count += e.getValue().value() ;
+// //return count ;
+// if ( count != multiSetSize )
+// {
+// Log.warn(this, "Mismatch") ;
+// return count ;
+// }
+
+ return multiSetSize ;
+ }
+
//@Override
private Iterator<T> iterator1()
{
@@ -89,7 +112,7 @@ public class MultiSet<T> implements Iter
Iterator<T> keys = map.keySet().iterator() ;
T key = null ;
- long count = 0 ;
+ long keyCount = 0 ;
T slot = null ;
//@Override
@@ -103,9 +126,9 @@ public class MultiSet<T> implements Iter
if ( key != null )
{
- if ( count < count(key) )
+ if ( keyCount < count(key) )
{
- count++ ;
+ keyCount++ ;
slot = key ;
return true ;
}
@@ -116,7 +139,7 @@ public class MultiSet<T> implements Iter
if ( keys.hasNext() )
{
key = keys.next() ;
- count = 1 ;
+ keyCount = 1 ;
slot = key ;
return true ;
}