huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "image_io/base/data_range_tracking_destination.h"
 
namespace photos_editing_formats {
namespace image_io {
 
void DataRangeTrackingDestination::StartTransfer() {
  tracked_data_range_ = DataRange();
  bytes_transferred_ = 0;
  has_disjoint_transfer_ranges_ = false;
  if (destination_ != nullptr) {
    destination_->StartTransfer();
  }
}
 
DataDestination::TransferStatus DataRangeTrackingDestination::Transfer(
    const DataRange& transfer_range, const DataSegment& data_segment) {
  DataDestination::TransferStatus transfer_status =
      destination_ ? destination_->Transfer(transfer_range, data_segment)
                   : DataDestination::kTransferOk;
  if (transfer_status != kTransferError) {
    bytes_transferred_ += transfer_range.GetLength();
  }
  if (has_disjoint_transfer_ranges_) {
    return transfer_status;
  }
  if (!tracked_data_range_.IsValid()) {
    tracked_data_range_ = transfer_range;
    return transfer_status;
  }
  if (tracked_data_range_.GetEnd() == transfer_range.GetBegin()) {
    tracked_data_range_ =
        DataRange(tracked_data_range_.GetBegin(), transfer_range.GetEnd());
    return transfer_status;
  } else {
    has_disjoint_transfer_ranges_ = true;
    return transfer_status;
  }
}
 
void DataRangeTrackingDestination::FinishTransfer() {
  if (destination_ != nullptr) {
    destination_->FinishTransfer();
  }
}
 
}  // namespace image_io
}  // namespace photos_editing_formats