From 87848aae4274462e9cabf0e7999ca6cc12a6b6f3 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Fri, 18 Mar 2011 03:49:20 +0000 Subject: [PATCH] make iterator work a little better, allow remove git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@527 f203690c-595d-4dc9-a70b-905162fa7fd2 --- .../healthmarketscience/jackcess/Cursor.java | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/java/com/healthmarketscience/jackcess/Cursor.java b/src/java/com/healthmarketscience/jackcess/Cursor.java index 58acfee..81a2555 100644 --- a/src/java/com/healthmarketscience/jackcess/Cursor.java +++ b/src/java/com/healthmarketscience/jackcess/Cursor.java @@ -963,30 +963,30 @@ public abstract class Cursor implements Iterable> protected abstract DirHandler getDirHandler(boolean moveForward); /** - * Row iterator for this table, unmodifiable. + * Row iterator for this table, modifiable. */ private final class RowIterator implements Iterator> { private final Collection _columnNames; private final boolean _moveForward; - private boolean _hasNext = false; + private Boolean _hasNext; private RowIterator(Collection columnNames, boolean moveForward) { - try { - _columnNames = columnNames; - _moveForward = moveForward; - reset(_moveForward); - _hasNext = moveToAnotherRow(_moveForward); - } catch(IOException e) { - throw new IllegalStateException(e); - } + _columnNames = columnNames; + _moveForward = moveForward; + reset(_moveForward); } - public boolean hasNext() { return _hasNext; } - - public void remove() { - throw new UnsupportedOperationException(); + public boolean hasNext() { + if(_hasNext == null) { + try { + _hasNext = moveToAnotherRow(_moveForward); + } catch(IOException e) { + throw new IllegalStateException(e); + } + } + return _hasNext; } public Map next() { @@ -995,13 +995,20 @@ public abstract class Cursor implements Iterable> } try { Map rtn = getCurrentRow(_columnNames); - _hasNext = moveToAnotherRow(_moveForward); + _hasNext = null; return rtn; } catch(IOException e) { throw new IllegalStateException(e); } } - + + public void remove() { + try { + deleteCurrentRow(); + } catch(IOException e) { + throw new IllegalStateException(e); + } + } } /** -- 2.39.5