コード例 #1
0
ファイル: ExcelSheet.cs プロジェクト: takhlaq/Lumina
        // 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);
        }
コード例 #2
0
        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));
                    }
                }
            }
        }
コード例 #3
0
ファイル: ExcelSheet.cs プロジェクト: NotAdam/Lumina
        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);
        }
コード例 #4
0
ファイル: ExcelSheet.cs プロジェクト: NotAdam/Lumina
        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);
                    }
                }
            }
        }