/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include "ImageRequest.h" namespace facebook { namespace react { class ImageRequest::ImageNoLongerNeededException : public std::logic_error { public: ImageNoLongerNeededException() : std::logic_error("Image no longer needed.") {} }; ImageRequest::ImageRequest() {} ImageRequest::ImageRequest( const ImageSource &imageSource, folly::Future &&responseFuture) : imageSource_(imageSource), responseFutureSplitter_(folly::splitFuture(std::move(responseFuture))) {} ImageRequest::ImageRequest(ImageRequest &&other) noexcept : imageSource_(std::move(other.imageSource_)), responseFutureSplitter_(std::move(other.responseFutureSplitter_)) { other.moved_ = true; }; ImageRequest::~ImageRequest() { if (!moved_) { auto future = responseFutureSplitter_.getFuture(); if (!future.isReady()) { future.raise(ImageNoLongerNeededException()); } } } folly::Future ImageRequest::getResponseFuture() const { if (moved_) { abort(); } std::lock_guard lock(mutex_); return responseFutureSplitter_.getFuture(); } } // namespace react } // namespace facebook