3 * Copyright 2007,2008 Free Software Foundation, Inc.
5 * This file is part of GNU Radio
7 * GNU Radio is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3, or (at your option)
12 * GNU Radio is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 #include <gcell/gc_job_manager.h>
26 #include "gc_job_manager_impl.h"
27 #include <boost/weak_ptr.hpp>
31 static boost::weak_ptr<gc_job_manager> s_singleton;
34 // custom deleter of gc_job_desc allocated via alloc_job_desc_sptr
35 class job_desc_deleter {
36 gc_job_manager_sptr d_mgr;
38 job_desc_deleter(gc_job_manager_sptr mgr) : d_mgr(mgr) {}
40 void operator()(gc_job_desc *jd) {
41 d_mgr->free_job_desc(jd);
48 gc_make_job_manager(const gc_jm_options *options)
50 return gc_job_manager_sptr(new gc_job_manager_impl(options));
53 gc_job_manager::gc_job_manager(const gc_jm_options *options)
58 gc_job_manager::~gc_job_manager()
64 gc_job_manager::set_debug(int debug)
70 gc_job_manager::debug()
76 gc_job_manager::set_singleton(gc_job_manager_sptr mgr)
82 gc_job_manager::singleton()
84 return gc_job_manager_sptr(s_singleton);
88 gc_job_manager::make_jd_sptr(gc_job_manager_sptr mgr, gc_job_desc *jd)
90 return gc_job_desc_sptr(jd, job_desc_deleter(mgr));
94 gc_job_manager::alloc_job_desc(gc_job_manager_sptr mgr)
96 return make_jd_sptr(mgr, mgr->alloc_job_desc());
100 // ------------------------------------------------------------------------
104 class spe_program_handle_deleter {
106 void operator()(spe_program_handle_t *program) {
108 int r = spe_image_close(program);
110 perror("spe_image_close");
116 // nop custom deleter
117 class nop_spe_program_handle_deleter {
119 void operator()(spe_program_handle_t *program) {
123 spe_program_handle_sptr
124 gc_program_handle_from_filename(const std::string &filename)
126 return spe_program_handle_sptr(spe_image_open(filename.c_str()),
127 spe_program_handle_deleter());
131 spe_program_handle_sptr
132 gc_program_handle_from_address(spe_program_handle_t *handle)
134 return spe_program_handle_sptr(handle, nop_spe_program_handle_deleter());
138 gc_job_status_string(gc_job_status_t status)
141 case JS_OK: return "JS_OK";
142 case JS_SHUTTING_DOWN: return "JS_SHUTTING_DOWN";
143 case JS_TOO_MANY_CLIENTS: return "JS_TOO_MANY_CLIENTS";
144 case JS_UNKNOWN_PROC: return "JS_UNKNOWN_PROC";
145 case JS_BAD_DIRECTION: return "JS_BAD_DIRECTION";
146 case JS_BAD_EAH: return "JS_BAD_EAH";
147 case JS_BAD_N_DIRECT: return "JS_BAD_N_DIRECT";
148 case JS_BAD_N_EA: return "JS_BAD_N_EA";
149 case JS_ARGS_TOO_LONG: return "JS_ARGS_TOO_LONG";
150 case JS_BAD_JUJU: return "JS_BAD_JUJU";
151 case JS_BAD_JOB_DESC: return "JS_BAD_JOB_DESC";
154 snprintf(buf, sizeof(buf), "unknown gc_job_status_t (%d)\n", status);
163 gc_exception::gc_exception(const std::string &msg)
168 gc_unknown_proc::gc_unknown_proc(const std::string &msg)
169 : gc_exception("gc_unknown_proc: " + msg)
173 gc_bad_alloc::gc_bad_alloc(const std::string &msg)
174 : gc_exception("gc_bad_alloc: " + msg)
178 gc_bad_align::gc_bad_align(const std::string &msg)
179 : gc_exception("gc_bad_align: " + msg)
183 gc_bad_submit::gc_bad_submit(const std::string &name, gc_job_status_t status)
184 : gc_exception("gc_bad_submit(" + name + "): " + gc_job_status_string(status))