changed workbook reference to index in CellLocation

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@701598 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-10-04 04:59:26 +00:00
parent d0850e433e
commit 4bf266b1c7
4 changed files with 21 additions and 14 deletions

View File

@ -25,24 +25,24 @@ import org.apache.poi.hssf.util.CellReference;
final class CellLocation { final class CellLocation {
public static final CellLocation[] EMPTY_ARRAY = { }; public static final CellLocation[] EMPTY_ARRAY = { };
private final EvaluationWorkbook _book; private final int _bookIx;
private final int _sheetIndex; private final int _sheetIndex;
private final int _rowIndex; private final int _rowIndex;
private final int _columnIndex; private final int _columnIndex;
private final int _hashCode; private final int _hashCode;
public CellLocation(EvaluationWorkbook book, int sheetIndex, int rowIndex, int columnIndex) { public CellLocation(int bookIx, int sheetIndex, int rowIndex, int columnIndex) {
if (sheetIndex < 0) { if (sheetIndex < 0) {
throw new IllegalArgumentException("sheetIndex must not be negative"); throw new IllegalArgumentException("sheetIndex must not be negative");
} }
_book = book; _bookIx = bookIx;
_sheetIndex = sheetIndex; _sheetIndex = sheetIndex;
_rowIndex = rowIndex; _rowIndex = rowIndex;
_columnIndex = columnIndex; _columnIndex = columnIndex;
_hashCode = System.identityHashCode(book) + sheetIndex + 17 * (rowIndex + 17 * columnIndex); _hashCode = _bookIx + 17 * (sheetIndex + 17 * (rowIndex + 17 * columnIndex));
} }
public Object getBook() { public int getBookIndex() {
return _book; return _bookIx;
} }
public int getSheetIndex() { public int getSheetIndex() {
return _sheetIndex; return _sheetIndex;
@ -65,7 +65,7 @@ final class CellLocation {
if (getSheetIndex() != other.getSheetIndex()) { if (getSheetIndex() != other.getSheetIndex()) {
return false; return false;
} }
if (getBook() != other.getBook()) { if (getBookIndex() != other.getBookIndex()) {
return false; return false;
} }
return true; return true;

View File

@ -97,7 +97,7 @@ public final class CollaboratingWorkbooksEnvironment {
EvaluationCache cache = new EvaluationCache(evalListener); EvaluationCache cache = new EvaluationCache(evalListener);
for(int i=0; i<nItems; i++) { for(int i=0; i<nItems; i++) {
evaluators[i].attachToEnvironment(env, cache); evaluators[i].attachToEnvironment(env, cache, i);
} }
} }

View File

@ -203,7 +203,7 @@ final class EvaluationCache {
CellLocation clB = (CellLocation) b; CellLocation clB = (CellLocation) b;
int cmp; int cmp;
cmp = System.identityHashCode(clA.getBook()) - System.identityHashCode(clB.getBook()); cmp = clA.getBookIndex() - clB.getBookIndex();
if (cmp != 0) { if (cmp != 0) {
return cmp; return cmp;
} }

View File

@ -80,6 +80,7 @@ public final class WorkbookEvaluator {
private final EvaluationWorkbook _workbook; private final EvaluationWorkbook _workbook;
private EvaluationCache _cache; private EvaluationCache _cache;
private int _workbookIx;
private final IEvaluationListener _evaluationListener; private final IEvaluationListener _evaluationListener;
private final Map _sheetIndexesBySheet; private final Map _sheetIndexesBySheet;
@ -94,6 +95,7 @@ public final class WorkbookEvaluator {
_cache = new EvaluationCache(evaluationListener); _cache = new EvaluationCache(evaluationListener);
_sheetIndexesBySheet = new IdentityHashMap(); _sheetIndexesBySheet = new IdentityHashMap();
_collaboratingWorkbookEnvironment = CollaboratingWorkbooksEnvironment.EMPTY; _collaboratingWorkbookEnvironment = CollaboratingWorkbooksEnvironment.EMPTY;
_workbookIx = 0;
} }
/** /**
@ -111,9 +113,10 @@ public final class WorkbookEvaluator {
System.out.println(s); System.out.println(s);
} }
} }
/* package */ void attachToEnvironment(CollaboratingWorkbooksEnvironment collaboratingWorkbooksEnvironment, EvaluationCache cache) { /* package */ void attachToEnvironment(CollaboratingWorkbooksEnvironment collaboratingWorkbooksEnvironment, EvaluationCache cache, int workbookIx) {
_collaboratingWorkbookEnvironment = collaboratingWorkbooksEnvironment; _collaboratingWorkbookEnvironment = collaboratingWorkbooksEnvironment;
_cache = cache; _cache = cache;
_workbookIx = workbookIx;
} }
/* package */ CollaboratingWorkbooksEnvironment getEnvironment() { /* package */ CollaboratingWorkbooksEnvironment getEnvironment() {
return _collaboratingWorkbookEnvironment; return _collaboratingWorkbookEnvironment;
@ -122,6 +125,7 @@ public final class WorkbookEvaluator {
/* package */ void detachFromEnvironment() { /* package */ void detachFromEnvironment() {
_collaboratingWorkbookEnvironment = CollaboratingWorkbooksEnvironment.EMPTY; _collaboratingWorkbookEnvironment = CollaboratingWorkbooksEnvironment.EMPTY;
_cache = new EvaluationCache(_evaluationListener); _cache = new EvaluationCache(_evaluationListener);
_workbookIx = 0;
} }
/* package */ IEvaluationListener getEvaluationListener() { /* package */ IEvaluationListener getEvaluationListener() {
return _evaluationListener; return _evaluationListener;
@ -148,7 +152,7 @@ public final class WorkbookEvaluator {
throw new IllegalArgumentException("value must not be null"); throw new IllegalArgumentException("value must not be null");
} }
int sheetIndex = getSheetIndex(sheet); int sheetIndex = getSheetIndex(sheet);
_cache.setValue(new CellLocation(_workbook, sheetIndex, rowIndex, columnIndex), true, CellLocation.EMPTY_ARRAY, value); _cache.setValue(getCellLoc(sheetIndex, rowIndex, columnIndex), true, CellLocation.EMPTY_ARRAY, value);
} }
/** /**
@ -157,7 +161,7 @@ public final class WorkbookEvaluator {
*/ */
public void notifySetFormula(HSSFSheet sheet, int rowIndex, int columnIndex) { public void notifySetFormula(HSSFSheet sheet, int rowIndex, int columnIndex) {
int sheetIndex = getSheetIndex(sheet); int sheetIndex = getSheetIndex(sheet);
_cache.setValue(new CellLocation(_workbook, sheetIndex, rowIndex, columnIndex), false, CellLocation.EMPTY_ARRAY, null); _cache.setValue(getCellLoc(sheetIndex, rowIndex, columnIndex), false, CellLocation.EMPTY_ARRAY, null);
} }
private int getSheetIndex(HSSFSheet sheet) { private int getSheetIndex(HSSFSheet sheet) {
@ -175,7 +179,7 @@ public final class WorkbookEvaluator {
public ValueEval evaluate(HSSFCell srcCell) { public ValueEval evaluate(HSSFCell srcCell) {
int sheetIndex = getSheetIndex(srcCell.getSheet()); int sheetIndex = getSheetIndex(srcCell.getSheet());
CellLocation cellLoc = new CellLocation(_workbook, sheetIndex, srcCell.getRowIndex(), srcCell.getCellNum()); CellLocation cellLoc = getCellLoc(sheetIndex, srcCell.getRowIndex(), srcCell.getCellNum());
return internalEvaluate(srcCell, cellLoc, new EvaluationTracker(_cache)); return internalEvaluate(srcCell, cellLoc, new EvaluationTracker(_cache));
} }
@ -471,8 +475,11 @@ public final class WorkbookEvaluator {
} else { } else {
cell = row.getCell(columnIndex); cell = row.getCell(columnIndex);
} }
CellLocation cellLoc = new CellLocation(_workbook, sheetIndex, rowIndex, columnIndex); CellLocation cellLoc = getCellLoc(sheetIndex, rowIndex, columnIndex);
tracker.acceptDependency(cellLoc); tracker.acceptDependency(cellLoc);
return internalEvaluate(cell, cellLoc, tracker); return internalEvaluate(cell, cellLoc, tracker);
} }
private CellLocation getCellLoc(int sheetIndex, int rowIndex, int columnIndex) {
return new CellLocation(_workbookIx, sheetIndex, rowIndex, columnIndex);
}
} }