public Iterator<E> iterator() { return elems.iterator(); }
@Override @Atomic(readOnly = true) public <T> T[] toArray(T[] a) { int size = size(); Cons<E> elems = entries.get(); if (a.length < size) { a = (T[]) Array.newInstance(a.getClass().getComponentType(), size); } Iterator<E> iter = elems.iterator(); Object[] result = a; for (int i = 0; i < size; i++) { result[i] = iter.next(); } if (size < a.length) { a[size] = null; } return a; }
@Override @Atomic(readOnly = true) public Object[] toArray() { int size = size(); Cons<E> elems = entries.get(); Object[] result = new Object[size]; Iterator<?> iter = elems.iterator(); for (int i = 0; i < size; i++) { result[i] = iter.next(); } return result; }
protected Iterator<DependenceRecord> getDependenceRecordsToRecheck() { Cons<Iterator<DependenceRecord>> iteratorsList = Cons.empty(); for (VBox box : boxesWritten.keySet()) { Depended dep = DependedVBoxes.getDependedForBoxIfExists(box); if (dep != null) { iteratorsList = iteratorsList.cons(dep.getDependenceRecords().iterator()); } } return new ChainedIterator<DependenceRecord>(iteratorsList.iterator()); }
/** * @return an <code>Iterator</code> of {@link DependenceRecord}s that have * to be rechecked, based on the boxes (objects) written by the * current transaction. */ @Override protected Iterator<DependenceRecord> getDependenceRecordsToRecheck() { if (!JvstmOJBConfig.canCreateDomainMetaObjects()) { // Dependence records are not used if the FenixFramework is not configured // to create meta objects return Collections.emptyIterator(); } Cons<Iterator<DependenceRecord>> iteratorsList = Cons.empty(); // The body of the for may cause the consolidation of elements of RelationLists, // which in turn modifies the boxesWritten. // So, create a copy of the boxesWritten, to avoid ConcurrentModificationExceptions Set<jvstm.VBox> currentBoxesWritten = new HashSet<jvstm.VBox>(boxesWritten.keySet()); for (jvstm.VBox box : currentBoxesWritten) { Depended dep = ((AbstractDomainObject) ((VBox) box).getOwnerObject()).getDomainMetaObject(); if (dep != null) { iteratorsList = iteratorsList.cons(dep.getDependenceRecords().iterator()); } } return new ChainedIterator<DependenceRecord>(iteratorsList.iterator()); }
private void consolidateElements() { VBox<FunctionalSet<E2>> box = getElementsBox(); FunctionalSet<E2> origSet = box.get(listHolder, attributeName); FunctionalSet<E2> newSet = origSet; if (elementsToRemove.get().size() > 0) { Iterator<E2> iter = elementsToRemove.get().iterator(); while (iter.hasNext()) { newSet = newSet.remove(iter.next()); } elementsToRemove.put(Cons.<E2> empty()); } if (elementsToAdd.get().size() > 0) { Iterator<E2> iter = elementsToAdd.get().iterator(); while (iter.hasNext()) { newSet = newSet.add(iter.next()); } elementsToAdd.put(Cons.<E2> empty()); } if (newSet != origSet) { // Because a nested FenixConsistencyCheckTransaction cannot perform writes, but may need to // consolidate the elements of a relation changed by the parent transaction box.putInParent(newSet); } }