public LiftedList <T> LoadDirectChildren <T>( MetadataTable childTable, GetTokenDelegate tokenSelector, CreateObjectDelegateEX <T> factory, MetadataTable parentTable, void *parentRow ) where T : class { var firstMemberIndex = (ZeroBasedIndex)tokenSelector(parentRow); ZeroBasedIndex lastMemberIndex; var tableIndex = GetRowIndex(parentTable, parentRow); if (tableIndex == GetRowCount(parentTable) - 1) { lastMemberIndex = new ZeroBasedIndex(GetRowCount(childTable)); } else { lastMemberIndex = (ZeroBasedIndex)tokenSelector(GetRow(tableIndex + 1, parentTable)); } var ret = new LiftedList <T>( (lastMemberIndex - firstMemberIndex).Value, index => GetRow(firstMemberIndex + index, childTable), factory, () => IsDisposed ); return(ret); }
internal LiftedList( int itemCount, GetRowDelegate rowFetcher, CreateObjectDelegateEX <T> factory, Func <bool> disposedChecker ) { itemCount.CheckGTE(0, "itemCount"); rowFetcher.CheckNotNull("rowFetcher"); factory.CheckNotNull("factory"); CreateObject = (index) => factory(rowFetcher(index), index); IsDisposed = disposedChecker.CheckNotNull("disposedChecker"); m_array = new T[itemCount]; }