1 #include <../../nrnconf.h>
2 #include "../nrnpython/nrnpython_config.h"
20 #if defined(USE_PYTHON)
25 #if defined(HAVE_SSTREAM)
33 bool operator()(
int i,
int j)
const {
38 class KeepArgs:
public std::map<int, bbsmpibuf*, ltint> {};
47 request_ = nrnmpi_newbuf(100);
56 nrnmpi_unref(sendbuf_);
57 nrnmpi_unref(recvbuf_);
58 nrnmpi_unref(request_);
65 printf(
"BBSClient error: %s\n", s);
68 void BBSClient::upkbegin() {
69 nrnmpi_upkbegin(recvbuf_);
72 char* BBSClient::getkey() {
73 return nrnmpi_getkey(recvbuf_);
76 int BBSClient::getid() {
77 return nrnmpi_getid(recvbuf_);
81 return nrnmpi_upkint(recvbuf_);
85 return nrnmpi_upkdouble(recvbuf_);
89 nrnmpi_upkvec(
n, x, recvbuf_);
93 return nrnmpi_upkstr(recvbuf_);
97 return nrnmpi_upkpickle(
n, recvbuf_);
102 sendbuf_ = nrnmpi_newbuf(100);
103 nrnmpi_ref(sendbuf_);
105 nrnmpi_pkbegin(sendbuf_);
109 nrnmpi_pkint(
i, sendbuf_);
113 nrnmpi_pkdouble(x, sendbuf_);
117 nrnmpi_pkvec(
n, x, sendbuf_);
121 nrnmpi_pkstr(s, sendbuf_);
125 nrnmpi_pkpickle(s,
n, sendbuf_);
133 nrnmpi_enddata(sendbuf_);
134 nrnmpi_pkstr(
key, sendbuf_);
135 nrnmpi_bbssend(
sid_,
POST, sendbuf_);
136 nrnmpi_unref(sendbuf_);
145 nrnmpi_enddata(sendbuf_);
146 nrnmpi_pkint(parentid, sendbuf_);
148 nrnmpi_unref(sendbuf_);
157 nrnmpi_enddata(sendbuf_);
158 nrnmpi_pkint(
id, sendbuf_);
160 nrnmpi_unref(sendbuf_);
169 nrnmpi_pkbegin(request_);
170 nrnmpi_enddata(request_);
171 nrnmpi_pkstr(
key, request_);
180 nrnmpi_pkbegin(request_);
181 nrnmpi_enddata(request_);
182 nrnmpi_pkint(
key, request_);
190 nrnmpi_unref(recvbuf_);
191 recvbuf_ = nrnmpi_newbuf(100);
192 nrnmpi_ref(recvbuf_);
193 int msgtag = nrnmpi_bbssendrecv(
sid_,
type, request_, recvbuf_);
200 if (msgtag ==
QUIT) {
274 #if defined(HAVE_STL)
275 nrnmpi_ref(sendbuf_);
283 #if defined(HAVE_STL)
285 nrnmpi_unref(recvbuf_);
288 recvbuf_ = (*i).second;
289 nrnmpi_ref(recvbuf_);
298 #if defined(USE_PYTHON)
314 #if defined(USE_PYTHON)
316 (*p_nrnpython_start)(0);
321 #if defined(USE_PYTHON)
323 (*p_nrnpython_finalize)();
345 nrnmpi_pkbegin(request_);
346 nrnmpi_enddata(request_);
virtual void post_todo(int parentid)
virtual void perror(const char *)
virtual int look_take_result(int pid)
virtual void take(const char *)
virtual void upkvec(int, double *)
virtual void pkpickle(const char *, size_t)
virtual void pkvec(int, double *)
virtual void return_args(int)
virtual void save_args(int)
virtual void post(const char *)
virtual bool look_take(const char *)
int get(const char *key, int type)
virtual char * upkpickle(size_t *)
virtual double upkdouble()
virtual int look_take_todo()
virtual bool look(const char *)
virtual void pkdouble(double)
virtual void post_result(int id)
virtual void pkstr(const char *)
virtual void return_args(int userid)
char * execute_helper(size_t *, int id, bool exec=true)
void(* p_nrnpython_finalize)()
static double map(void *v)
int const size_t const size_t n
int nrnmpi_numprocs_world
int(* p_nrnpython_start)(int)
static double userid(void *v)
static void nrnmpi_int_broadcast(int *, int, int)