1 #include <../../nrnconf.h>
34 #define ASSERTfgets(a, b, c) nrn_assert(fgets(a, b, c) != 0)
35 #define ASSERTfread(a, b, c, d) nrn_assert(fread(a, b, c, d) == c)
36 #define ASSERTfwrite(a, b, c, d) nrn_assert(fwrite(a, b, c, d) == c)
84 bool check(
bool warn);
193 for (
int i = 0;
i <
cnt; ++
i) {
200 for (
int i = 0;
i <
cnt; ++
i) {
208 for (
int i = 0;
i <
cnt; ++
i) {
220 for (
int i = 0;
i <
cnt; ++
i) {
222 b = ss[
i].
root ? 1 : 0;
258 if (
ssi[im].offset < 0) {
278 "SaveState warning: %d sections exist but saved %d\n",
287 "SaveState warning: %d cells exist but saved %d\n",
310 for (
int isec = 0; isec <
nsec_; ++isec) {
316 fprintf(stderr,
"SaveState warning: saved section no longer exists\n");
319 "SaveState warning: %s has %d nodes but saved %d\n",
327 for (
int inode = 0; inode < ss.
nnode; ++inode) {
332 for (
p = nd->
prop;
p;
p =
p->next) {
339 "SaveState warning: \
340 fewer mechanisms saved than exist at node %d of %s\n",
346 if (
p->type != ns.
type[
i]) {
349 "SaveState warning: mechanisms out of order at node %d of %s\n\
350 saved %s but need %s\n",
364 "SaveState warning: more mechanisms saved than exist at node %d of %s\n",
371 if (!
sec->parentsec || ss.
root) {
372 if (
sec->parentsec || !ss.
root) {
375 "SaveState warning: Saved section and %s are not both root sections.\n",
393 for (
p = nd->
prop;
p;
p =
p->next) {
400 "SaveState warning: \
401 fewer mechanisms saved than exist at a root node\n");
405 if (
p->type != ns.
type[
i]) {
408 "SaveState warning: mechanisms out of order at a rootnode\n\
409 saved %s but need %s\n",
419 fprintf(stderr,
"SaveState warning: more mechanisms saved than exist at a rootnode\n");
430 "SaveState warning: different number of %s saved than exist.\n",
456 for (inode = 0; inode < ss.
nnode; ++inode) {
461 if (!
sec->parentsec) {
479 nprs_ = prl->count();
492 for (
p = nd->
prop;
p;
p =
p->next) {
506 for (
p = nd->
prop;
p;
p =
p->next) {
526 for (isec = 0; isec <
nsec_; ++isec) {
528 for (inode = 0; inode < ss.
nnode; ++inode) {
606 for (
int isec = 0; isec <
nsec_; ++isec) {
609 for (inode = 0; inode < ss.
nnode; ++inode) {
630 prs_[
i] = prl->item(
i)->savestate_save();
646 for (
p = nd->
prop;
p;
p =
p->next) {
653 if (
type == EXTRACELL) {
660 for (
int ip =
ssi[
type].offset; ip <
max; ++ip) {
661 ns.
state[istate++] =
p->param[ip];
672 double* d = ml.
data[
i];
673 for (
int j = 0;
j < sz; ++
j) {
682 hoc_execerror(
"SaveState:",
"Stored state inconsistent with current neuron structure");
689 for (
int isec = 0; isec <
nsec_; ++isec) {
692 for (inode = 0; inode < ss.
nnode; ++inode) {
714 assert(nprs_ <= prl->count());
717 prs_[
i]->savestate_restore();
722 hoc_execerror(
"SaveState:",
"This state requires Python to unpack.");
733 for (
p = nd->
prop;
p;
p =
p->next) {
740 if (
type == EXTRACELL) {
747 for (
int ip =
ssi[
type].offset; ip <
max; ++ip) {
748 p->param[ip] = ns.
state[istate++];
759 double* d = ml.
data[
i];
760 for (
int j = 0;
j < sz; ++
j) {
776 if (strcmp(
buf,
"SaveState binary file version 6.0\n") != 0) {
777 if (strcmp(
buf,
"SaveState binary file version 7.0\n") == 0) {
781 hoc_execerror(
"Bad SaveState binary file",
" Neither version 6.0 or 7.0");
797 for (
int isec = 0; isec <
nsec_; ++isec) {
802 for (
int inode = 0; inode < ss.
nnode; ++inode) {
828 sscanf(
buf,
"%d\n", &
n);
832 int nt = 0, nc = 0, ns = 0;
864 }
catch (
const std::bad_alloc&
e) {
885 fprintf(f,
"SaveState binary file version %d.0\n", version);
889 for (
int isec = 0; isec <
nsec_; ++isec) {
892 for (
int inode = 0; inode < ss.
nnode; ++inode) {
923 prs_[
i]->savestate_write(f);
1023 for (
i = 0;
i <
n; ++
i) {
1064 sscanf(
buf,
"%d\n", &
n);
1070 for (
i = 0;
i <
n; ++
i) {
1097 hoc_execerror(
"SaveState::readnet",
"Unimplemented DiscreteEvent type");
1122 for (
i = 0;
i <
n; ++
i) {
1132 "SaveState warning: There are %d NetCon but %d saved\n",
1149 "SaveState warning: %s is matched with NetCon[%d]\n",
1151 ncs_[
i].object_index);
1158 "SaveState warning: %s has %d weight states but saved %d\n",
1176 "SaveState warning: There are %d internal PreSyn but %d saved\n",
1283 close =
chkarg(2, 0, 1) ? true :
false;
1296 close =
chkarg(2, 0, 1) ? true :
false;
1299 ss->
write(f, close);
const char * secname(Section *sec)
virtual DiscreteEvent * savestate_save()
virtual void savestate_write(FILE *)
static DiscreteEvent * savestate_read(FILE *)
virtual void savestate_restore(double deliverytime, NetCvode *)
static DiscreteEvent * savestate_read(FILE *)
static DiscreteEvent * savestate_read(FILE *)
static DiscreteEvent * savestate_read(FILE *)
int prop_index(const Symbol *) const
int var_type(Symbol *) const
bool open(const char *filename, const char *type)
static DiscreteEvent * savestate_read(FILE *)
static PlayRecordSave * savestate_read(FILE *)
static DiscreteEvent * savestate_read(FILE *)
virtual void unref() const
virtual void write(OcFile *, bool close)
void restorenode(NodeState &, Node *)
virtual void restore(int type)
void restoreacell(ACellState &, int type)
void saveacell(ACellState &, int type)
bool checknode(NodeState &, Node *, bool)
void fwrite_SecState(SecState *, int, FILE *)
void tqsave(const TQItem *, int)
void fread_SecState(SecState *, int, FILE *)
void fread_NodeState(NodeState *, int, FILE *)
virtual void read(OcFile *, bool close)
void savenode(NodeState &, Node *)
bool checkacell(ACellState &, int type, bool)
void allocnode(NodeState &, Node *)
void tqcount(const TQItem *, int)
void fwrite_NodeState(NodeState *, int, FILE *)
void allocacell(ACellState &, int type)
static DiscreteEvent * savestate_read(FILE *)
void forall_callback(void(*)(const TQItem *, int))
double chkarg(int, double low, double high)
void hoc_execerror(const char *, const char *)
size_t hoc_total_array_data(Symbol *s, Objectdata *obd)
char * hoc_object_name(Object *ob)
Symbol * hoc_lookup(const char *)
Object ** hoc_objgetarg(int)
#define ITERATE(itm, lst)
#define DiscreteEventType
#define PlayRecordEventType
void section_ref(Section *)
void section_unref(Section *)
int const size_t const size_t n
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
#define BinaryMode(ocfile)
short * nrn_is_artificial_
static double ssread(void *v)
#define ASSERTfread(a, b, c, d)
ReceiveFunc * pnt_receive
PlayRecList * net_cvode_instance_prl()
static SaveState * this_savestate
static Member_func members[]
static void * cons(Object *)
#define ASSERTfgets(a, b, c)
static void destruct(void *v)
void(* ReceiveFunc)(Point_process *, double *, double)
static double sswrite(void *v)
hoc_Item * net_cvode_instance_psl()
void(* nrnpy_restore_savestate)(int64_t, char *)
static double save(void *v)
#define ASSERTfwrite(a, b, c, d)
static void tqcallback(const TQItem *tq, int i)
TQueue * net_cvode_instance_event_queue(NrnThread *)
NetCvode * net_cvode_instance
static double restore(void *v)
void(* nrnpy_store_savestate)(char **save_data, uint64_t *save_data_size)
check_obj_type(o, "SectionList")
Represent main neuron object computed by single thread.
HocStruct cTemplate * ctemplate