Home | History | Annotate | Download | only in base
      1 #include "image_io/base/data_segment_data_source.h"
      2 
      3 #include "image_io/base/data_destination.h"
      4 #include "image_io/base/data_range.h"
      5 #include "image_io/base/data_segment.h"
      6 
      7 namespace photos_editing_formats {
      8 namespace image_io {
      9 
     10 void DataSegmentDataSource::Reset() {}
     11 
     12 std::shared_ptr<DataSegment> DataSegmentDataSource::GetDataSegment(
     13     size_t begin, size_t min_size) {
     14   DataRange range(begin, begin + min_size);
     15   if (range.GetIntersection(shared_data_segment_->GetDataRange()).IsValid()) {
     16     return shared_data_segment_;
     17   } else {
     18     return std::shared_ptr<DataSegment>(nullptr);
     19   }
     20 }
     21 
     22 DataSource::TransferDataResult DataSegmentDataSource::TransferData(
     23     const DataRange& data_range, size_t /*best_size*/,
     24     DataDestination* data_destination) {
     25   bool data_transferred = false;
     26   DataDestination::TransferStatus status = DataDestination::kTransferDone;
     27   DataRange transfer_range =
     28       shared_data_segment_->GetDataRange().GetIntersection(data_range);
     29   if (data_destination && transfer_range.IsValid()) {
     30     data_transferred = true;
     31     status = data_destination->Transfer(transfer_range, *shared_data_segment_);
     32   }
     33   if (data_transferred) {
     34     return status == DataDestination::kTransferError ? kTransferDataError
     35                                                      : kTransferDataSuccess;
     36   } else {
     37     return data_destination ? kTransferDataNone : kTransferDataError;
     38   }
     39 }
     40 
     41 }  // namespace image_io
     42 }  // namespace photos_editing_formats
     43