SAGA C++ API 1.6
cpr_job_description.cpp
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines