/* Copyright 2017 The MathWorks, Inc. */ #ifndef ENGINE_FUTURE_IMPL_HPP #define ENGINE_FUTURE_IMPL_HPP #include #include #include #include #include "../engine_future.hpp" #include "../cpp_engine_api.hpp" #include "../engine_exception.hpp" namespace matlab { namespace execution { using namespace matlab::engine; inline FutureResult>::FutureResult() :std::future>(), future() {} inline void FutureResult>::swap(FutureResult>& a_futureresult) { std::swap(future, a_futureresult.future); std::swap(*static_cast>*>(this), static_cast>&>(a_futureresult)); } inline FutureResult>::FutureResult(std::future>&& a_future):std::future>(), future(std::move(a_future)) { } inline FutureResult>::FutureResult(FutureResult>&& rhs):std::future>(), future() { swap(rhs); } inline FutureResult>& FutureResult>::operator=(FutureResult>&& rhs) { swap(rhs); return *this; } inline FutureResult>::~FutureResult() { } inline std::unique_ptr FutureResult>::get() { return future.get(); } inline SharedFutureResult> FutureResult>::share() { return SharedFutureResult>(std::move(*this)); } inline bool FutureResult>::valid() const { return future.valid(); } inline void FutureResult>::wait() const { return future.wait(); } template std::future_status FutureResult>::wait_until(const std::chrono::time_point& abs_time) const { return future.wait_until(abs_time); } template std::future_status FutureResult>::wait_for(const std::chrono::duration& rel_time) const { return future.wait_for(rel_time); } inline bool FutureResult>::cancel(bool allowInterrupt) { return false; } inline SharedFutureResult>::SharedFutureResult():std::shared_future>(), sharedFuture() { } inline SharedFutureResult>::~SharedFutureResult() { } inline SharedFutureResult>::SharedFutureResult(const SharedFutureResult& a_sharedfuture):std::shared_future>(), sharedFuture(a_sharedfuture.sharedFuture) { } inline void SharedFutureResult>::swap(SharedFutureResult>& a_sharedfuture) { std::swap(sharedFuture, a_sharedfuture.sharedFuture); std::swap(*static_cast>*>(this), static_cast>&>(a_sharedfuture)); } inline SharedFutureResult>::SharedFutureResult(SharedFutureResult&& a_sharedfuture):std::shared_future>(), sharedFuture() { swap(a_sharedfuture); } inline SharedFutureResult>::SharedFutureResult(FutureResult>&& a_futureresult):std::shared_future>(), sharedFuture(std::move(a_futureresult.future)) { } inline SharedFutureResult>& SharedFutureResult>::operator=(SharedFutureResult>&& rhs) { swap(rhs); return *this; } inline SharedFutureResult>& SharedFutureResult>::operator=(const SharedFutureResult>& rhs) { *(static_cast>*>(this)) = rhs; sharedFuture = rhs.sharedFuture; return *this; } inline const std::unique_ptr& SharedFutureResult>::get() const { return sharedFuture.get(); } inline bool SharedFutureResult>::valid() const { return sharedFuture.valid(); } inline void SharedFutureResult>::wait() const { return sharedFuture.wait(); } template std::future_status SharedFutureResult>::wait_until(const std::chrono::time_point& abs_time) const { return sharedFuture.wait_until(abs_time); } template std::future_status SharedFutureResult>::wait_for(const std::chrono::duration& rel_time) const { return sharedFuture.wait_for(rel_time); } inline bool SharedFutureResult>::cancel(bool allowInterrupt) { return false; } } } #endif /* ENGINE_FUTURE_IMPL_HPP */