|
From: <de...@us...> - 2013-01-03 22:57:12
|
Revision: 8174
http://fudaa.svn.sourceforge.net/fudaa/?rev=8174&view=rev
Author: deniger
Date: 2013-01-03 22:57:03 +0000 (Thu, 03 Jan 2013)
Log Message:
-----------
Modified Paths:
--------------
trunk/framework/ctulu-common/src/main/java/org/fudaa/ctulu/CtuluListSelection.java
Added Paths:
-----------
trunk/framework/ctulu-common/src/test/java/org/fudaa/ctulu/CtuluListSelectionTest.java
Modified: trunk/framework/ctulu-common/src/main/java/org/fudaa/ctulu/CtuluListSelection.java
===================================================================
--- trunk/framework/ctulu-common/src/main/java/org/fudaa/ctulu/CtuluListSelection.java 2013-01-03 14:12:49 UTC (rev 8173)
+++ trunk/framework/ctulu-common/src/main/java/org/fudaa/ctulu/CtuluListSelection.java 2013-01-03 22:57:03 UTC (rev 8174)
@@ -17,8 +17,8 @@
import javax.swing.ListSelectionModel;
/**
- * Liste de selection encapsulant un BitSet. Des methodes sont rajoutees pour gerer les operations avec d'autres listes d'index ou
- * des inversions de selection dans un intervalle donne.
+ * Liste de selection encapsulant un BitSet. Des methodes sont rajoutees pour gerer les operations avec d'autres listes d'index ou des inversions de
+ * selection dans un intervalle donne.
*
* @see java.util.BitSet utilisation de BitSet
* @version $Id: CtuluListSelection.java,v 1.8.4.1 2008-05-13 12:10:48 bmarchan Exp $
@@ -70,6 +70,8 @@
*/
private Set listeners_;
CtuluListSelectionEvent evt_;
+ private boolean maxComputed = false;
+ private int max = -1;
/**
* initialise la liste de selection avec comme taille 32.
@@ -109,7 +111,7 @@
}
public static BitSet createForSelectedIdx(final int[] _b) {
- if (_b == null|| _b.length==0) {
+ if (_b == null || _b.length == 0) {
return null;
}
BitSet res = new BitSet(_b[_b.length - 1]);
@@ -149,6 +151,7 @@
private boolean add(final int _i, final boolean _event) {
if (!isSelected(_i)) {
index_.set(_i);
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -162,6 +165,7 @@
for (int i = _deb; i <= _fin; i++) {
r |= add(i, false);
}
+ maxComputed = false;
if (r && _event) {
fireSelectionEvent();
}
@@ -173,6 +177,7 @@
return false;
}
removeInterval(0, getMaxIndex(), false);
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -198,6 +203,7 @@
private void inverse(final int _taille, final boolean _event) {
if (isEmpty()) {
setSelectionInterval(0, _taille - 1, false);
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -218,6 +224,7 @@
} else if (tailleIdx < max) {
index_.clear(_taille, max + 1);
}
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -234,6 +241,7 @@
return false;
}
index_.or(_l.index_);
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -243,6 +251,7 @@
private boolean remove(final int _i, final boolean _event) {
if (isSelected(_i)) {
index_.clear(_i);
+ maxComputed = false;
if (_event) {
fireSelectionEvent();
}
@@ -262,6 +271,7 @@
for (int i = _deb; i <= _fin; i++) {
r |= remove(i, false);
}
+ maxComputed = false;
if (r && _event) {
fireSelectionEvent();
}
@@ -272,6 +282,7 @@
boolean r = removeInterval(0, _deb - 1, false);
r |= addInterval(_deb, _fin, false);
r |= removeInterval(_fin + 1, getMaxIndex(), false);
+ maxComputed = false;
if ((listeners_ != null) && r && _event) {
fireSelectionEvent();
}
@@ -330,6 +341,7 @@
return false;
} else if (!_l.contains(this)) {
index_.and(_l.index_);
+ maxComputed = false;
if (listeners_ != null) {
fireSelectionEvent();
}
@@ -441,7 +453,12 @@
*/
@Override
public int getMaxIndex() {
- return index_.length() - 1;
+ if (maxComputed) {
+ return max;
+ }
+ max = index_.length() - 1;
+ maxComputed = true;
+ return max;
}
@Override
@@ -621,6 +638,7 @@
remove(i, false);
}
}
+ maxComputed = false;
if ((listeners_ != null) && r) {
fireSelectionEvent();
}
@@ -653,6 +671,7 @@
}
clear(false);
or(_l, false);
+ maxComputed = false;
if (listeners_ != null) {
fireSelectionEvent();
}
@@ -669,6 +688,7 @@
index_.set(i);
}
}
+ maxComputed = false;
if (listeners_ != null) {
fireSelectionEvent();
}
@@ -685,9 +705,11 @@
s.set(i);
}
}
+
if (!s.equals(index_)) {
clear(false);
index_.or(s);
+ maxComputed = false;
fireSelectionEvent();
}
}
@@ -712,6 +734,7 @@
return false;
}
index_.xor(_l.index_);
+ maxComputed = false;
if (listeners_ != null) {
fireSelectionEvent();
}
Added: trunk/framework/ctulu-common/src/test/java/org/fudaa/ctulu/CtuluListSelectionTest.java
===================================================================
--- trunk/framework/ctulu-common/src/test/java/org/fudaa/ctulu/CtuluListSelectionTest.java (rev 0)
+++ trunk/framework/ctulu-common/src/test/java/org/fudaa/ctulu/CtuluListSelectionTest.java 2013-01-03 22:57:03 UTC (rev 8174)
@@ -0,0 +1,165 @@
+/*
+ GPL 2
+ */
+package org.fudaa.ctulu;
+
+import java.util.BitSet;
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class CtuluListSelectionTest extends TestCase {
+
+ public CtuluListSelectionTest() {
+ }
+
+ public void testCreate() {
+ CtuluListSelection selection = new CtuluListSelection();
+ assertEquals(-1, selection.getMaxIndex());
+ assertEquals(-1, selection.getMinIndex());
+
+ BitSet set = new BitSet();
+ set.set(2);
+ selection = new CtuluListSelection(set);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+
+ selection = new CtuluListSelection(selection);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+
+
+ selection = new CtuluListSelection(10);
+ assertEquals(-1, selection.getMaxIndex());
+ assertEquals(-1, selection.getMinIndex());
+
+
+ }
+
+ public void testAdd() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(5, selection.getMinIndex());
+ }
+
+ public void testAddList() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(5, selection.getMinIndex());
+
+ CtuluListSelection selectionToAdd = new CtuluListSelection();
+ selectionToAdd.add(2);
+ selectionToAdd.add(6);
+ selection.add(selectionToAdd);
+ assertEquals(6, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testInverse() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ selection.inverse();
+ assertEquals(4, selection.getMaxIndex());
+ assertEquals(0, selection.getMinIndex());
+
+ selection.inverse(10);
+ assertEquals(9, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testRemove() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ selection.remove(5);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+
+ }
+
+ public void testRemoveList() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ CtuluListSelection selectionToRemove = new CtuluListSelection();
+ selectionToRemove.add(5);
+ selection.remove(selectionToRemove);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+
+ }
+
+ public void testAddInterval() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ selection.addInterval(1, 10);
+ assertEquals(10, selection.getMaxIndex());
+ assertEquals(1, selection.getMinIndex());
+ }
+
+ public void testRemoveInterval() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ selection.removeInterval(4, 10);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testAnd() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ CtuluListSelection selectionAnd = new CtuluListSelection();
+ selectionAnd.add(2);
+ selection.and(selectionAnd);
+ assertEquals(2, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testOr() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ CtuluListSelection selectionOr = new CtuluListSelection();
+ selectionOr.add(6);
+ selection.or(selectionOr);
+ assertEquals(6, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testXOr() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ CtuluListSelection selectionOr = new CtuluListSelection();
+ selectionOr.add(5);
+ selectionOr.add(3);
+ selection.xor(selectionOr);
+ assertEquals(3, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ }
+
+ public void testClear() {
+ CtuluListSelection selection = new CtuluListSelection();
+ selection.add(5);
+ selection.add(2);
+ assertEquals(5, selection.getMaxIndex());
+ assertEquals(2, selection.getMinIndex());
+ selection.clear();
+ assertEquals(-1, selection.getMaxIndex());
+ assertEquals(-1, selection.getMinIndex());
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|