コード例 #1
0
        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);
        }
コード例 #2
0
        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];
        }