// private Tuple< int, int > GetRowCacheKey( int row ) // { // return GetRowCacheKey( row, 0 ); // } // // private Tuple< int, int > GetRowCacheKey( int row, int subRow ) // { // return Tuple.Create( row, subRow ); // } public List <T> GetRows() { var rows = new List <T>(); foreach (var page in DataPages) { var file = page.File; var rowPtrs = file.RowData; var parser = new RowParser(this, file); foreach (var rowPtr in rowPtrs.Values) { parser.SeekToRow((int)rowPtr.RowId); if (Header.Variant == ExcelVariant.Subrows) { // read subrows for (int i = 0; i < parser.RowCount; i++) { // var id = GetRowCacheKey( (int)rowPtr.RowId, i ); // if( RowCache.TryGetValue( id, out var cachedRow ) ) // { // rows.Add( cachedRow ); // continue; // } parser.SeekToRow((int)rowPtr.RowId, i); var obj = Activator.CreateInstance <T>(); obj.PopulateData(parser, _Lumina); rows.Add(obj); } } else { // var id = GetRowCacheKey( (int)rowPtr.RowId ); // if( RowCache.TryGetValue( id, out var cachedRow ) ) // { // rows.Add( cachedRow ); // continue; // } parser.SeekToRow((int)rowPtr.RowId); var obj = Activator.CreateInstance <T>(); obj.PopulateData(parser, _Lumina); rows.Add(obj); } } } return(rows); }
public IEnumerable <RowParser> EnumerateRowParsers() { foreach (var page in DataPages) { var file = page.File; var rowPtrs = file.RowData; var parser = new RowParser(this, file); foreach (var rowPtr in rowPtrs.Values) { if (Header.Variant == ExcelVariant.Subrows) { // required to read the row header out and know how many subrows there is parser.SeekToRow(rowPtr.RowId); // read subrows for (uint i = 0; i < parser.RowCount; i++) { yield return(GetRowParser(rowPtr.RowId, i)); } } else { yield return(GetRowParser(rowPtr.RowId)); } } } }
private T ReadSubRowObj(RowParser parser, uint rowId, uint subRowId) { parser.SeekToRow(rowId, subRowId); var obj = Activator.CreateInstance <T>(); obj.PopulateData(parser, GameData, RequestedLanguage); return(obj); }
public IEnumerator <T> GetEnumerator() { foreach (var page in DataPages) { var file = page.File; var rowPtrs = file.RowData; var parser = new RowParser(this, file); foreach (var rowPtr in rowPtrs.Values) { if (Header.Variant == ExcelVariant.Subrows) { // required to read the row header out and know how many subrows there is parser.SeekToRow(rowPtr.RowId); // read subrows for (uint i = 0; i < parser.RowCount; i++) { var cacheKey = GetCacheKey(rowPtr.RowId, i); if (_rowCache.TryGetValue(cacheKey, out var cachedRow)) { yield return(cachedRow); continue; } var obj = ReadSubRowObj(parser, rowPtr.RowId, i); _rowCache.Add(cacheKey, obj); yield return(obj); } } else { var cacheKey = GetCacheKey(rowPtr.RowId); if (_rowCache.TryGetValue(cacheKey, out var cachedRow)) { yield return(cachedRow); continue; } var obj = ReadRowObj(parser, rowPtr.RowId); _rowCache.Add(cacheKey, obj); yield return(obj); } } } }