More fixing EPPLus perf
diff --git a/EPPlus/CellStore.cs b/EPPlus/CellStore.cs
index d977a96..623ab56 100644
--- a/EPPlus/CellStore.cs
+++ b/EPPlus/CellStore.cs
@@ -68,7 +68,7 @@
{
var page = (short)(Row >> CellStore<int>.pageBits);
_searchIx.Index = page;
- var res = (_pages[page].Index == page) ? page : Array.BinarySearch(_pages, 0, PageCount, _searchIx);
+ var res = (page>=0 && page<_pages.Length && _pages[page].Index == page) ? page : Array.BinarySearch(_pages, 0, PageCount, _searchIx);
if (res >= 0)
{
GetPage(Row, ref res);
@@ -263,7 +263,7 @@
internal int GetPosition(int offset)
{
_searchIx.Index = (short)offset;
- return (Rows[offset-1].Index == offset) ? offset-1 : Array.BinarySearch(Rows, 0, RowCount, _searchIx);
+ return (offset>0 && offset-1<Rows.Length && Rows[offset-1].Index == offset) ? offset-1 : Array.BinarySearch(Rows, 0, RowCount, _searchIx);
}
internal int GetNextRow(int row)
{
@@ -355,7 +355,7 @@
internal int GetPosition(int Column)
{
_searchIx.Index = (short)Column;
- return (_columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx);
+ return (Column>0 && Column-1<_columnIndex.Length && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx);
}
internal CellStore<T> Clone()
{
@@ -568,7 +568,7 @@
}
short ix = (short)(Row - pageItem.IndexOffset);
_searchIx.Index = ix;
- var cellPos = (pageItem.Rows[ix-1].Index == ix) ? ix-1 : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
+ var cellPos = (ix>0 && ix-1<pageItem.Rows.Length && pageItem.Rows[ix-1].Index == ix) ? ix-1 : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
if (cellPos >= 0)
{
return pageItem.Rows[cellPos].IndexPointer;
@@ -609,7 +609,7 @@
{
lock (_columnIndex)
{
- var col = (_columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) });
+ var col = (Column>0 && Column-1 < _columnIndex.Length && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) });
var page = (short)(Row >> pageBits);
if (col >= 0)
{
@@ -645,7 +645,7 @@
short ix = (short)(Row - ((pageItem.Index << pageBits) + pageItem.Offset));
_searchIx.Index = ix;
- var cellPos = (pageItem.Rows[ix].Index == ix) ? ix : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
+ var cellPos = (ix>=0 && ix<pageItem.Rows.Length && pageItem.Rows[ix].Index == ix) ? ix : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx);
if (cellPos < 0)
{
cellPos = ~cellPos;