#include "image_io/base/data_segment_data_source.h" #include "image_io/base/data_destination.h" #include "image_io/base/data_range.h" #include "image_io/base/data_segment.h" namespace photos_editing_formats { namespace image_io { void DataSegmentDataSource::Reset() {} std::shared_ptr<DataSegment> DataSegmentDataSource::GetDataSegment( size_t begin, size_t min_size) { DataRange range(begin, begin + min_size); if (range.GetIntersection(shared_data_segment_->GetDataRange()).IsValid()) { return shared_data_segment_; } else { return std::shared_ptr<DataSegment>(nullptr); } } DataSource::TransferDataResult DataSegmentDataSource::TransferData( const DataRange& data_range, size_t /*best_size*/, DataDestination* data_destination) { bool data_transferred = false; DataDestination::TransferStatus status = DataDestination::kTransferDone; DataRange transfer_range = shared_data_segment_->GetDataRange().GetIntersection(data_range); if (data_destination && transfer_range.IsValid()) { data_transferred = true; status = data_destination->Transfer(transfer_range, *shared_data_segment_); } if (data_transferred) { return status == DataDestination::kTransferError ? kTransferDataError : kTransferDataSuccess; } else { return data_destination ? kTransferDataNone : kTransferDataError; } } } // namespace image_io } // namespace photos_editing_formats