SAGA Adaptor CPI v.1.0
|
00001 // Copyright (c) 2005-2009 Hartmut Kaiser 00002 // Copyright (c) 2008 Andre Merzky (andre@merzky.net) 00003 // 00004 // Distributed under the Boost Software License, Version 1.0. (See accompanying 00005 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 00006 00007 // this is needed in every file including detail/attribute_impl.hpp and not 00008 // belonging to the engine 00009 //#define SAGA_ATTRIBUTE_EXPORTS 00010 #define SAGA_NO_IMPORT_ATTRIBUTE 00011 #define SAGA_EXPORT_ATTRIBUTE SAGA_CPR_PACKAGE_EXPORT 00012 00013 #include <boost/assign/list_inserter.hpp> 00014 #include <boost/assign/std/vector.hpp> 00015 00016 // include cpr API and implementation 00017 #include <saga/saga/cpr.hpp> 00018 #include <saga/saga/adaptors/metric.hpp> 00019 #include <saga/impl/cpr.hpp> 00020 00021 #include <saga/saga/detail/attribute_impl.hpp> 00022 00024 namespace saga { namespace cpr { 00025 00026 description::description () 00027 : saga::job::description (new saga::impl::cpr_job_description ()) 00028 { 00029 using namespace boost::assign; 00030 std::vector<std::string> valid_keys; 00031 valid_keys += 00032 saga::job::attributes::description_executable, 00033 saga::job::attributes::description_arguments, 00034 saga::job::attributes::description_environment, 00035 saga::job::attributes::description_working_directory, 00036 saga::job::attributes::description_interactive, 00037 saga::job::attributes::description_input, 00038 saga::job::attributes::description_output, 00039 saga::job::attributes::description_error, 00040 saga::job::attributes::description_file_transfer, 00041 saga::job::attributes::description_cleanup, 00042 saga::job::attributes::description_job_start_time, 00043 saga::job::attributes::description_total_cpu_time, 00044 saga::job::attributes::description_wall_time_limit, 00045 saga::job::attributes::description_total_physical_memory, 00046 saga::job::attributes::description_cpu_architecture, 00047 saga::job::attributes::description_operating_system_type, 00048 saga::job::attributes::description_candidate_hosts, 00049 saga::job::attributes::description_queue, 00050 saga::job::attributes::description_job_contact, 00051 saga::job::attributes::description_job_project, 00052 saga::job::attributes::description_spmd_variation, 00053 saga::job::attributes::description_total_cpu_count, 00054 saga::job::attributes::description_number_of_processes, 00055 saga::job::attributes::description_processes_per_host, 00056 saga::job::attributes::description_threads_per_process 00057 ; 00058 00059 // initialize list of valid keys 00060 this->init_keynames(valid_keys); 00061 00062 strmap_type attributes_scalar_rw; 00063 insert(attributes_scalar_rw) 00064 (saga::job::attributes::description_executable, "") 00065 (saga::job::attributes::description_operating_system_type, "") 00066 (saga::job::attributes::description_cpu_architecture, "") 00067 (saga::job::attributes::description_total_cpu_count, "") 00068 (saga::job::attributes::description_spmd_variation, "") 00069 (saga::job::attributes::description_number_of_processes, "") 00070 (saga::job::attributes::description_processes_per_host, "") 00071 (saga::job::attributes::description_threads_per_process, "") 00072 (saga::job::attributes::description_working_directory, "") 00073 (saga::job::attributes::description_interactive, "") 00074 (saga::job::attributes::description_input, "") 00075 (saga::job::attributes::description_output, "") 00076 (saga::job::attributes::description_error, "") 00077 (saga::job::attributes::description_cleanup, "") 00078 (saga::job::attributes::description_job_start_time, "") 00079 (saga::job::attributes::description_total_cpu_time, "") 00080 (saga::job::attributes::description_wall_time_limit, "") 00081 (saga::job::attributes::description_total_physical_memory, "") 00082 (saga::job::attributes::description_queue, "") 00083 (saga::job::attributes::description_job_contact, "") 00084 ; 00085 00086 strmap_type attributes_vector_rw; 00087 insert(attributes_vector_rw) 00088 (saga::job::attributes::description_candidate_hosts, "") 00089 (saga::job::attributes::description_file_transfer, "") 00090 (saga::job::attributes::description_environment, "") 00091 (saga::job::attributes::description_arguments, "") 00092 (saga::job::attributes::description_candidate_hosts, "") 00093 (saga::job::attributes::description_job_project, "") 00094 ; 00095 00096 // initialize attribute implementation 00097 this->init (strmap_type(), attributes_scalar_rw, 00098 strmap_type(), attributes_vector_rw); 00099 this->init (false, true); // cache only implementation 00100 } 00101 00102 description::description(saga::impl::cpr_job_description *impl) 00103 : saga::job::description (impl) 00104 { 00105 } 00106 00107 description::~description (void) 00108 { 00109 } 00110 00112 description::description (saga::object const& o) 00113 : saga::job::description (o) 00114 { 00115 if (this->get_type() != saga::object::JobDescription) 00116 { 00117 SAGA_THROW("Bad type conversion.", saga::BadParameter); 00118 } 00119 } 00120 00121 description &description::operator= (saga::object const& o) 00122 { 00123 return saga::object::operator=(o), *this; 00124 } 00125 00126 } // namespace job 00127 00128 // ///////////////////////////////////////////////////////////////////////////// 00129 // // implement the attribute functions (we need to explicitly specialize 00130 // // the template because the functions are not implemented inline) 00131 // template struct SAGA_CPR_PACKAGE_EXPORT saga::detail::attribute<cpr::description>; 00132 // 00133 // template struct SAGA_CPR_PACKAGE_EXPORT saga::detail::attribute_priv<cpr::description, task_base::Async>; 00134 // template struct SAGA_CPR_PACKAGE_EXPORT saga::detail::attribute_priv<cpr::description, task_base::Task>; 00135 // template struct SAGA_CPR_PACKAGE_EXPORT saga::detail::attribute_priv<cpr::description, task_base::Sync>; 00136 00138 } // namespace saga 00139 00140