00001 #ifndef SAGA_PACKAGES_JOB_JOB_SERVICE_HPP
00002 #define SAGA_PACKAGES_JOB_JOB_SERVICE_HPP
00003
00004 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00005 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/job_service.hpp")
00006 #endif
00007
00008
00009
00010
00011
00012
00013 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00014 #pragma wave option(output: null)
00015 #endif
00016
00017 #include <string>
00018 #include <vector>
00019
00020
00021 #include <saga/saga/util.hpp>
00022 #include <saga/saga/base.hpp>
00023 #include <saga/saga/types.hpp>
00024 #include <saga/saga/session.hpp>
00025 #include <saga/saga/call.hpp>
00026 #include <saga/saga/url.hpp>
00027
00028 #include <saga/saga/packages/job/config.hpp>
00029 #include <saga/saga/job.hpp>
00030
00031
00032 #if defined(BOOST_MSVC)
00033 #pragma warning(push)
00034 #pragma warning(disable: 4251 4231 4275 4660)
00035 #endif
00036
00037 #ifdef SAGA_DEBUG
00038 #include <saga/saga/packages/job/preprocessed/job_service.hpp>
00039 #else
00040
00041 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00042 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/job_service.hpp")
00043 #endif
00045 namespace saga
00046 {
00047 namespace job {
00048
00056 class SAGA_JOB_PACKAGE_EXPORT service
00057 : public saga::object
00058 {
00059 private:
00061
00062
00063 SAGA_CALL_CREATE_PRIV_2(session const&, saga::url)
00064
00065 SAGA_CALL_PRIV_1(create_job, description)
00066 SAGA_CALL_CONST_PRIV_0(get_url)
00067 SAGA_CALL_PRIV_5(run_job, std::string, std::string,
00068 saga::job::ostream&, saga::job::istream&, saga::job::istream&)
00069 SAGA_CALL_PRIV_2(run_job, std::string, std::string)
00070 SAGA_CALL_PRIV_0(list)
00071 SAGA_CALL_PRIV_1(get_job, std::string)
00072 SAGA_CALL_PRIV_0(get_self)
00074
00075 protected:
00077
00078 friend class saga::impl::job_service;
00079 friend struct saga::detail::create_default<service>;
00080
00081 TR1::shared_ptr <saga::impl::job_service> get_impl_sp(void) const;
00082 saga::impl::job_service* get_impl (void) const;
00083 explicit service(saga::impl::job_service *impl);
00084 explicit service(int);
00086
00087 public:
00092 explicit service (session const& s, saga::url rm = saga::url());
00093
00098 explicit service (saga::url rm = saga::url());
00099
00104 explicit service (saga::object const& o);
00105
00110 ~service (void);
00111
00115 static service create(session const& s, saga::url rm = saga::url())
00116 {
00117 return service(s, rm);
00118 }
00120 SAGA_CALL_CREATE_2_DEF_1(session const&, saga::url, saga::url())
00122
00125 static service create(saga::url rm = saga::url())
00126 {
00127 return service(rm);
00128 }
00129 template <typename Tag>
00130 static saga::task create(saga::url rm = saga::url())
00131 {
00132 return create<Tag>(saga::detail::get_the_session(), rm);
00133 }
00134
00139 service& operator= (saga::object const& o);
00140
00148 job create_job(description job_desc)
00149 {
00150 saga::task t = create_jobpriv(job_desc, saga::task_base::Sync());
00151 return t.get_result<saga::job::job>();
00152 }
00153 SAGA_CALL_PUB_1_DEF_0(create_job, description)
00154
00155
00159 saga::url get_url() const
00160 {
00161 saga::task t = get_urlpriv(saga::task_base::Sync());
00162 return t.get_result<saga::url>();
00163 }
00164 SAGA_CALL_CONST_PUB_0_DEF_0(get_url)
00165
00166
00173 job run_job(std::string commandline, std::string hostname,
00174 saga::job::ostream& stdin_stream, saga::job::istream& stdout_stream,
00175 saga::job::istream& stderr_stream)
00176 {
00177 saga::task t = run_jobpriv(commandline, hostname, stdin_stream,
00178 stdout_stream, stderr_stream, saga::task_base::Sync());
00179 return t.get_result<saga::job::job>();
00180 }
00182 SAGA_CALL_PUB_5_DEF_0(run_job, std::string, std::string,
00183 saga::job::ostream&, saga::job::istream&, saga::job::istream&)
00185
00186 job run_job(std::string commandline, std::string hostname = "")
00187 {
00188 saga::task t = run_jobpriv(commandline, hostname, saga::task_base::Sync());
00189 return t.get_result<saga::job::job>();
00190 }
00192 SAGA_CALL_PUB_2_DEF_1(run_job, std::string, std::string, "")
00194
00195
00196
00203 std::vector<std::string> list(void)
00204 {
00205 saga::task t = listpriv(saga::task_base::Sync());
00206 return t.get_result<std::vector<std::string> >();
00207 }
00208 SAGA_CALL_PUB_0_DEF_0(list)
00209
00210
00218 job get_job(std::string job_id)
00219 {
00220 saga::task t = get_jobpriv(job_id, saga::task_base::Sync());
00221 return t.get_result<saga::job::job>();
00222 }
00224 SAGA_CALL_PUB_1_DEF_0(get_job, std::string)
00226
00234 saga::job::self get_self()
00235 {
00236 saga::task t = get_selfpriv(saga::task_base::Sync());
00237 return t.get_result<saga::job::self>();
00238 }
00239 SAGA_CALL_PUB_0_DEF_0(get_self)
00240
00241 };
00242
00243 }
00244
00245 namespace detail
00246 {
00247
00248
00249
00250 template<>
00251 struct create_default<saga::job::service>
00252 {
00253 static saga::job::service* call()
00254 {
00255 return new saga::job::service(1);
00256 }
00257 template <typename T_> static void call(T_* obj)
00258 {
00259 new (obj) saga::job::service(1);
00260 }
00261 };
00262 }
00263
00264 }
00265
00267 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00268 #pragma wave option(output: null)
00269 #endif
00270
00271 #endif // !defined(SAGA_DEBUG)
00272
00273
00274 #if defined(BOOST_MSVC)
00275 #pragma warning(pop)
00276 #endif
00277
00278 #endif // !defined(SAGA_PACKAGES_JOB_JOB_SERVICE_HPP)
00279