]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/SpreadsheetLine.java
SCL API for direct access to SpreadsheetBooks
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / SpreadsheetLine.java
index d11fdc6d253d417596948ffe5ce18bbc29df358d..43df74c1027fb7f02204a7365a2bf135aaff382e 100644 (file)
@@ -1,11 +1,16 @@
 package org.simantics.spreadsheet.solver;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.function.Consumer;
 
+import org.simantics.scl.runtime.function.Function1;
+import org.simantics.scl.runtime.tuple.Tuple;
 import org.simantics.spreadsheet.Range;
 import org.simantics.spreadsheet.SpreadsheetVisitor;
 import org.simantics.spreadsheet.Spreadsheets;
@@ -36,6 +41,45 @@ public class SpreadsheetLine implements SpreadsheetElement<SpreadsheetCell, Spre
     public SpreadsheetEngine getEngine() {
         return ((SpreadsheetLines)parent).getEngine();
     }
+    
+    public int getRow() {
+        return row;
+    }
+
+    public SpreadsheetLine possibleOffset(int offset) {
+        return getEngine().getLine(row+offset);
+    }
+    
+    public SpreadsheetCell cellAt(int column) {
+        int index = Collections.binarySearch(cells, new BinarySearch(column), new Comparator<BinarySearch>() {
+            @Override
+            public int compare(BinarySearch bs1, BinarySearch bs2) {
+                return Integer.compare(bs1.column, bs2.column);
+            }
+        });
+        if(index >= 0)
+            return cells.get(index);
+        else
+            return null;
+    }
+
+    public String getLinesPath() {
+        return "/" + ((SpreadsheetLines)parent).getLinesPath() + "/" + getName();
+    }
+
+    public void forCells(Consumer<SpreadsheetCell> consumer, int min, int max) {
+        for(int i=min;i<cells.size() && i<max;i++) {
+            SpreadsheetCell cell = cells.get(i);
+            if(SpreadsheetCell.EMPTY == cell) continue;
+            consumer.accept(cell);
+        }
+    }
+
+    public List<SpreadsheetCell> getCells(int min, int max) {
+        ArrayList<SpreadsheetCell> result = new ArrayList<>();
+        forCells(cell -> result.add(cell), min, max);
+        return result;
+    }
 
     @Override
     public String getName() {