]> source.dussan.org Git - jackcess.git/commitdiff
make iterator work a little better, allow remove
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 18 Mar 2011 03:49:20 +0000 (03:49 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 18 Mar 2011 03:49:20 +0000 (03:49 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@527 f203690c-595d-4dc9-a70b-905162fa7fd2

src/java/com/healthmarketscience/jackcess/Cursor.java

index 58acfee89bef2b47adeb2330b655ebe63e32e01a..81a2555de9e49d27a06f92bf5005df080eb0235c 100644 (file)
@@ -963,30 +963,30 @@ public abstract class Cursor implements Iterable<Map<String, Object>>
   protected abstract DirHandler getDirHandler(boolean moveForward);
 
   /**
-   * Row iterator for this table, unmodifiable.
+   * Row iterator for this table, modifiable.
    */
   private final class RowIterator implements Iterator<Map<String, Object>>
   {
     private final Collection<String> _columnNames;
     private final boolean _moveForward;
-    private boolean _hasNext = false;
+    private Boolean _hasNext;
     
     private RowIterator(Collection<String> 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<String, Object> next() {
@@ -995,13 +995,20 @@ public abstract class Cursor implements Iterable<Map<String, Object>>
       }
       try {
         Map<String, Object> 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);
+      }
+    }    
   }
 
   /**