00001
00002
00003
00004
00005
00006 #include <utility>
00007 #include <vector>
00008 #include <string>
00009
00010 #include <boost/assert.hpp>
00011
00012 #include <saga/saga/task.hpp>
00013 #include <saga/saga/url.hpp>
00014
00015 #include <saga/impl/task.hpp>
00016
00017 namespace saga
00018 {
00019
00020 template <typename Retval>
00021 Retval& task::get_result()
00022 {
00023 if (saga::task_base::Failed == get_task_if()->get_state())
00024 {
00025 get_task_if()->rethrow();
00026 }
00027
00028 Retval* retval = saga::detail::any_cast<Retval>(
00029 &get_task_result(*this));
00030 if (0 == retval)
00031 {
00032 SAGA_THROW("Wrong data type requested while calling get_result",
00033 saga::NoSuccess);
00034 }
00035 return *retval;
00036 }
00037
00038 template <typename Retval>
00039 Retval const& task::get_result() const
00040 {
00041 if (saga::task_base::Failed == get_task_if()->get_state())
00042 {
00043 get_task_if()->rethrow();
00044 }
00045
00046 Retval const* retval = saga::detail::any_cast<Retval const>(
00047 &get_task_result(*this));
00048 if (0 == retval)
00049 {
00050 SAGA_THROW("Wrong data type requested while calling get_result",
00051 saga::NoSuccess);
00052 }
00053 return *retval;
00054 }
00055 }
00056