private void TraverseChunk(TFChunk.TFChunk chunk,
                            Action<PrepareLogRecord, int> processPrepare,
                            Action<CommitLogRecord, int> processCommit,
                            Action<SystemLogRecord, int> processSystem)
 {
     var result = chunk.TryReadFirst();
     while (result.Success)
     {
         var record = result.LogRecord;
         switch (record.RecordType)
         {
             case LogRecordType.Prepare:
             {
                 var prepare = (PrepareLogRecord)record;
                 processPrepare(prepare, result.RecordLength);
                 break;
             }
             case LogRecordType.Commit:
             {
                 var commit = (CommitLogRecord)record;
                 processCommit(commit, result.RecordLength);
                 break;
             }
             case LogRecordType.System:
             {
                 var system = (SystemLogRecord)record;
                 processSystem(system, result.RecordLength);
                 break;
             }
             default:
                 throw new ArgumentOutOfRangeException();
         }
         result = chunk.TryReadClosestForward(result.NextPosition);
     }
 }
Exemplo n.º 2
0
        private void TraverseChunkBasic(TFChunk.TFChunk chunk, CancellationToken ct,
                                        Action <CandidateRecord> process)
        {
            var result = chunk.TryReadFirst();

            while (result.Success)
            {
                process(new CandidateRecord(result.LogRecord, result.RecordLength));

                ct.ThrowIfCancellationRequested();

                result = chunk.TryReadClosestForward(result.NextPosition);
            }
        }