public CopyTableEnumerator(Enumerator <TValue> impl, RecordKeyAccessor <TValue> keyAccessor) : base(impl)
        {
            _keyAccessor      = keyAccessor;
            _currentInstance  = default;
            _currentCopyIndex = default;
            _blockHandler     = default;

            if (Parser.Header.CopyTable.Exists)
            {
                _blockHandler = Parser.FindSegmentHandler <CopyTableHandler>(SegmentIdentifier.CopyTable);
                Debug.Assert(_blockHandler != null, "Block handler missing for copy table");

                _cloningFactory = new RuntimeCloner <TValue>(Parser.Type, Parser.Options.TokenType);

                InstanceFactory = forceReloadBase =>
                {
                    // Read an instance if one exists or if we're forced to
                    if (forceReloadBase || EqualityComparer <TValue> .Default.Equals(_currentInstance, default))
                    {
                        _currentInstance = base.ObtainCurrent();

                        // If we got default(TValue) from the underlying implementation we really are done
                        if (EqualityComparer <TValue> .Default.Equals(_currentInstance, default))
                        {
                            return(default !);
示例#2
0
        public CopyTableEnumerator(Enumerator <TParser, TValue> impl) : base(impl)
        {
            if (Parser.Header.CopyTable.Exists)
            {
                _blockHandler = Parser.FindSegmentHandler <CopyTableHandler>(SegmentIdentifier.CopyTable);
                Debug.Assert(_blockHandler != null, "Block handler missing for copy table");

                InstanceFactory = forceReloadBase =>
                {
                    // Read an instance if one exists or if we're forced to
                    if (forceReloadBase || EqualityComparer <TValue> .Default.Equals(_currentInstance, default))
                    {
                        _currentInstance = base.ObtainCurrent();

                        // If we got default(TValue) from the underlying implementation we really are done
                        if (EqualityComparer <TValue> .Default.Equals(_currentInstance, default))
                        {
                            return(default);