[cvs] / jsr166 / src / main / java / util / Vector.java Repository:
ViewVC logotype

Diff of /jsr166/src/main/java/util/Vector.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.36, Mon Nov 14 22:46:22 2016 UTC revision 1.37, Wed Nov 30 03:31:47 2016 UTC
# Line 1398  Line 1398 
1398       */       */
1399      @Override      @Override
1400      public Spliterator<E> spliterator() {      public Spliterator<E> spliterator() {
1401          return new VectorSpliterator<>(this, null, 0, -1, 0);          return new VectorSpliterator(null, 0, -1, 0);
1402      }      }
1403    
1404      /** Similar to ArrayList Spliterator */      /** Similar to ArrayList Spliterator */
1405      static final class VectorSpliterator<E> implements Spliterator<E> {      final class VectorSpliterator implements Spliterator<E> {
         private final Vector<E> list;  
1406          private Object[] array;          private Object[] array;
1407          private int index; // current index, modified on advance/split          private int index; // current index, modified on advance/split
1408          private int fence; // -1 until used; then one past last index          private int fence; // -1 until used; then one past last index
1409          private int expectedModCount; // initialized when fence set          private int expectedModCount; // initialized when fence set
1410    
1411          /** Create new spliterator covering the given range */          /** Create new spliterator covering the given range */
1412          VectorSpliterator(Vector<E> list, Object[] array, int origin, int fence,          VectorSpliterator(Object[] array, int origin, int fence,
1413                            int expectedModCount) {                            int expectedModCount) {
             this.list = list;  
1414              this.array = array;              this.array = array;
1415              this.index = origin;              this.index = origin;
1416              this.fence = fence;              this.fence = fence;
# Line 1422  Line 1420 
1420          private int getFence() { // initialize on first use          private int getFence() { // initialize on first use
1421              int hi;              int hi;
1422              if ((hi = fence) < 0) {              if ((hi = fence) < 0) {
1423                  synchronized (list) {                  synchronized (Vector.this) {
1424                      array = list.elementData;                      array = elementData;
1425                      expectedModCount = list.modCount;                      expectedModCount = modCount;
1426                      hi = fence = list.elementCount;                      hi = fence = elementCount;
1427                  }                  }
1428              }              }
1429              return hi;              return hi;
# Line 1434  Line 1432 
1432          public Spliterator<E> trySplit() {          public Spliterator<E> trySplit() {
1433              int hi = getFence(), lo = index, mid = (lo + hi) >>> 1;              int hi = getFence(), lo = index, mid = (lo + hi) >>> 1;
1434              return (lo >= mid) ? null :              return (lo >= mid) ? null :
1435                  new VectorSpliterator<>(list, array, lo, index = mid,                  new VectorSpliterator(array, lo, index = mid, expectedModCount);
                                         expectedModCount);  
1436          }          }
1437    
1438          @SuppressWarnings("unchecked")          @SuppressWarnings("unchecked")
# Line 1446  Line 1443 
1443              if (getFence() > (i = index)) {              if (getFence() > (i = index)) {
1444                  index = i + 1;                  index = i + 1;
1445                  action.accept((E)array[i]);                  action.accept((E)array[i]);
1446                  if (list.modCount != expectedModCount)                  if (modCount != expectedModCount)
1447                      throw new ConcurrentModificationException();                      throw new ConcurrentModificationException();
1448                  return true;                  return true;
1449              }              }
# Line 1456  Line 1453 
1453          @SuppressWarnings("unchecked")          @SuppressWarnings("unchecked")
1454          public void forEachRemaining(Consumer<? super E> action) {          public void forEachRemaining(Consumer<? super E> action) {
1455              int i, hi; // hoist accesses and checks from loop              int i, hi; // hoist accesses and checks from loop
1456              Vector<E> lst; Object[] a;              Object[] a;
1457              if (action == null)              if (action == null)
1458                  throw new NullPointerException();                  throw new NullPointerException();
             if ((lst = list) != null) {  
1459                  if ((hi = fence) < 0) {                  if ((hi = fence) < 0) {
1460                      synchronized (lst) {                  synchronized (Vector.this) {
1461                          expectedModCount = lst.modCount;                      expectedModCount = modCount;
1462                          a = array = lst.elementData;                      a = array = elementData;
1463                          hi = fence = lst.elementCount;                      hi = fence = elementCount;
1464                      }                      }
1465                  }                  }
1466                  else                  else
# Line 1472  Line 1468 
1468                  if (a != null && (i = index) >= 0 && (index = hi) <= a.length) {                  if (a != null && (i = index) >= 0 && (index = hi) <= a.length) {
1469                      while (i < hi)                      while (i < hi)
1470                          action.accept((E) a[i++]);                          action.accept((E) a[i++]);
1471                      if (lst.modCount == expectedModCount)                  if (modCount == expectedModCount)
1472                          return;                          return;
1473                  }                  }
             }  
1474              throw new ConcurrentModificationException();              throw new ConcurrentModificationException();
1475          }          }
1476    

Legend:
Removed from v.1.36  
changed lines
  Added in v.1.37

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8