1 #include <../../nrnconf.h>
14 #if defined(HAVE_SSTREAM)
36 bool todo_less_than(
const WorkItem*)
const;
40 bool operator()(
const char* s1,
const char* s2)
const {
41 return strcmp(s1, s2) < 0;
46 bool operator()(
int i,
int j)
const {
52 bool operator()(
const WorkItem* w1,
const WorkItem* w2)
const {
53 return w1->todo_less_than(w2);
57 static char* newstr(
const char* s) {
58 char* s1 =
new char[strlen(s) + 1];
66 printf(
"WorkItem %d\n",
id);
74 WorkItem::~WorkItem() {
81 bool WorkItem::todo_less_than(
const WorkItem* w)
const {
82 WorkItem* w1 = (WorkItem*)
this;
83 WorkItem* w2 = (WorkItem*) w;
84 while (w1->parent_ != w2->parent_) {
85 if (w1->id_ < w2->id_) {
92 printf(
"todo_less_than %d < %d return %d\n", this->
id_, w->id_, w1->id_ < w2->id_);
94 return w1->id_ < w2->id_;
97 class MessageList:
public std::multimap<const char*, const MessageValue*, ltstr> {};
99 class ReadyList:
public std::set<WorkItem*, ltWorkItem> {};
100 class ResultList:
public std::multimap<int, const WorkItem*, ltint> {};
108 hoc_execerror(
"BBSLocalServer not working",
"Compiled without STL");
179 m->
u.
pd =
new double[
n];
180 for (
i = 0;
i <
n; ++
i) {
189 m->
u.
s =
new char[strlen(str) + 1];
197 m->
u.
s =
new char[
n];
199 memcpy(m->
u.
s, bytes,
n);
226 for (
i = 0;
i <
n; ++
i) {
253 #if defined(HAVE_STL)
263 #if defined(HAVE_STL)
267 printf(
"~BBSLocalServer not deleting everything\n");
275 #if defined(HAVE_STL)
279 char* s = (
char*) ((*m).first);
288 printf(
"fail srvr_look_take |%s|\n",
key);
297 #if defined(HAVE_STL)
319 #if defined(HAVE_STL)
320 MessageList::iterator m =
messages_->insert(
321 std::pair<const char* const, const MessageValue*>(newstr(
key), val));
332 #if defined(HAVE_STL)
333 WorkItem* w =
new WorkItem(
next_id_++, val);
334 WorkList::iterator
p =
work_->find(parentid);
336 w->parent_ = (WorkItem*) ((*p).second);
338 work_->insert(std::pair<const int, const WorkItem*>(w->id_, w));
341 printf(
"srvr_post_todo id=%d pid=%d\n", w->id_, parentid);
349 #if defined(HAVE_STL)
350 WorkList::iterator
i =
work_->find(
id);
351 WorkItem* w = (WorkItem*) ((*i).second);
355 results_->insert(std::pair<const int, const WorkItem*>(w->parent_ ? w->parent_->id_ : 0, w));
357 printf(
"srvr_post_done id=%d pid=%d\n",
id, w->parent_ ? w->parent_->id_ : 0);
363 #if defined(HAVE_STL)
364 ReadyList::iterator
i =
todo_->begin();
370 printf(
"srvr look_take_todo %d\n", w->id_);
376 printf(
"srvr look_take_todo failed\n");
387 #if defined(HAVE_STL)
388 ResultList::iterator
i =
results_->find(pid);
390 WorkItem* w = (WorkItem*) ((*i).second);
395 WorkList::iterator
j =
work_->find(
id);
398 printf(
"srvr look_take_result %d for parent %d\n", w->id_, pid);
404 printf(
"srvr look_take_result failed for parent %d\n", pid);
bool look(const char *key, MessageValue **)
void post_result(int id, MessageValue *)
void post_todo(int parentid, MessageValue *)
virtual ~BBSLocalServer()
int look_take_result(int pid, MessageValue **)
void post(const char *key, MessageValue *)
bool look_take(const char *key, MessageValue **)
int look_take_todo(MessageValue **)
int upkvec(int, double *)
int upkpickle(char *, size_t *)
int pkpickle(const char *, size_t)
void hoc_execerror(const char *, const char *)
static double map(void *v)
int const size_t const size_t n