bbsimpl.h

Go to the documentation of this file.
00001 #ifndef bbsimpl_h
00002 #define bbsimpl_h
00003 
00004 class BBSImpl {
00005 public:
00006    BBSImpl();
00007    virtual ~BBSImpl();
00008 
00009    virtual boolean look(const char*) = 0;
00010 
00011    virtual void take(const char*) = 0; /* blocks til something to take */
00012    virtual boolean look_take(const char*) = 0; /* returns false if nothing to take */
00013    // after taking use these
00014    virtual int upkint() = 0;
00015    virtual double upkdouble() = 0;
00016    virtual void upkvec(int, double*) = 0;
00017    virtual char* upkstr() = 0; // delete [] char* when finished
00018    virtual char* upkpickle(size_t*) = 0; // delete [] char* when finished
00019 
00020    // before posting use these
00021    virtual void pkbegin() = 0;
00022    virtual void pkint(int) = 0;
00023    virtual void pkdouble(double) = 0;
00024    virtual void pkvec(int, double*) = 0;
00025    virtual void pkstr(const char*) = 0;
00026    virtual void pkpickle(const char*, size_t) = 0;
00027    virtual void post(const char*) = 0;
00028 
00029    virtual void post_todo(int parentid) = 0;
00030    virtual void post_result(int id) = 0;
00031    virtual int look_take_result(int pid) = 0; // returns id, or 0 if nothing
00032    virtual int look_take_todo() = 0; // returns id, or 0 if nothing
00033    virtual int take_todo() = 0; // returns id
00034    virtual void save_args(int userid) = 0;
00035    virtual void return_args(int userid);
00036 
00037    virtual void execute(int id); // assumes a "todo" message in receive buffer
00038    virtual int submit(int userid);
00039    virtual boolean working(int &id, double& x, int& userid);
00040    virtual void context();
00041 
00042    virtual void start();
00043    virtual void done();
00044 
00045    virtual void worker(); // forever execute
00046    virtual boolean is_master();
00047    virtual double time();
00048    
00049    virtual void perror(const char*);
00050 public:
00051    int working_id_, n_;
00052    double wait_time_;
00053    double integ_time_;
00054    double send_time_;
00055    char* pickle_ret_;
00056    size_t pickle_ret_size_;
00057    static boolean is_master_;
00058    static boolean started_, done_;
00059    static boolean use_pvm_;
00060    static int mytid_;
00061    static int debug_;
00062 protected:
00063    char* execute_helper(size_t*, int id); // involves hoc specific details in ocbbs.c
00064    void subworld_worker_execute(); //shadows execute_helper. ie. each of
00065       // the nrnmpi_myid_bbs workers (and master) need to execute
00066       // the same thing on each of the subworld processes
00067       // associated with nrnmpi_myid==0. A subworld does not
00068       // intracommunicate via the bulletin board but only via
00069       // mpi on the subworld communicator.
00070 };
00071 
00072 #endif
Generated on Mon Jun 13 08:10:28 2011 for NEURON by  doxygen 1.6.3