NEURON
neuronapi.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdbool.h>
4 
5 #ifdef __cplusplus
6 #include <cstdio>
7 #include <cstddef>
8 using std::FILE;
9 extern "C" {
10 #else
11 #include <stdio.h>
12 #include <stddef.h>
13 #endif
14 
15 // forward declarations (c++) and opaque c types
16 typedef struct Symbol Symbol;
17 typedef struct Object Object;
18 typedef struct Section Section;
20 typedef struct nrn_Item nrn_Item;
22 typedef struct Symlist Symlist;
24 
25 typedef enum {
33  STACK_UNKNOWN = -1
35 
36 /****************************************
37  * Initialization
38  ****************************************/
39 int nrn_init(int argc, const char** argv);
40 void nrn_stdout_redirect(int (*myprint)(int, char*));
41 
42 /****************************************
43  * Sections
44  ****************************************/
45 Section* nrn_section_new(const char* name);
46 void nrn_section_connect(Section* child_sec, double child_x, Section* parent_sec, double parent_x);
47 void nrn_section_length_set(Section* sec, double length);
50 void nrn_section_Ra_set(Section* sec, double val);
52 void nrn_section_rallbranch_set(Section* sec, double val);
53 char const* nrn_secname(Section* sec);
55 void nrn_section_pop(void);
57 nrn_Item* nrn_allsec(void);
59 bool nrn_section_is_active(const Section* sec);
62 Section* nrn_cas(void);
63 
64 /****************************************
65  * Segments
66  ****************************************/
67 int nrn_nseg_get(const Section* sec);
68 void nrn_nseg_set(Section* sec, int nseg);
69 void nrn_segment_diam_set(Section* sec, double x, double diam);
70 double nrn_segment_diam_get(Section* sec, double x);
71 void nrn_rangevar_push(Symbol* sym, Section* sec, double x);
72 double nrn_rangevar_get(Symbol* sym, Section* sec, double x);
73 void nrn_rangevar_set(Symbol* sym, Section* sec, double x, double value);
74 
75 /****************************************
76  * Functions, objects, and the stack
77  ****************************************/
78 Symbol* nrn_symbol(const char* name);
79 void nrn_symbol_push(Symbol* sym);
80 int nrn_symbol_type(const Symbol* sym);
81 int nrn_symbol_subtype(const Symbol* sym);
82 double* nrn_symbol_dataptr(const Symbol* sym);
83 bool nrn_symbol_is_array(const Symbol* sym);
84 void nrn_double_push(double val);
85 double nrn_double_pop(void);
86 void nrn_double_ptr_push(double* addr);
87 double* nrn_double_ptr_pop(void);
88 void nrn_str_push(char** str);
89 char** nrn_str_pop(void);
90 void nrn_int_push(int i);
91 int nrn_int_pop(void);
92 void nrn_object_push(Object* obj);
93 Object* nrn_object_pop(void);
96 Object* nrn_object_new(Symbol* sym, int narg);
97 Symbol* nrn_method_symbol(const Object* obj, const char* name);
98 // TODO: the next two functions throw exceptions in C++; need a version that
99 // returns a bool success indicator instead (this is actually the
100 // classic behavior of OcJump)
101 void nrn_method_call(Object* obj, Symbol* method_sym, int narg);
102 void nrn_function_call(Symbol* sym, int narg);
104  Symbol* method_sym,
105  int narg,
106  char* error_msg,
107  size_t error_msg_size);
108 int nrn_function_call_nothrow(Symbol* sym, int narg, char* error_msg, size_t error_msg_size);
109 void nrn_object_ref(Object* obj);
110 void nrn_object_unref(Object* obj);
111 char const* nrn_class_name(const Object* obj);
112 bool nrn_prop_exists(const Object* obj);
113 double nrn_distance(Section* sec0, double x0, Section* sec1, double x1);
114 
115 /****************************************
116  * Shape Plot
117  ****************************************/
123 
124 /****************************************
125  * Miscellaneous
126  ****************************************/
127 int nrn_hoc_call(char const* command);
136 int nrn_vector_capacity(const Object* vec);
137 double* nrn_vector_data(Object* vec);
138 double nrn_property_get(const Object* obj, const char* name);
139 double nrn_property_array_get(const Object* obj, const char* name, int i);
140 void nrn_property_set(Object* obj, const char* name, double value);
141 void nrn_property_array_set(Object* obj, const char* name, int i, double value);
142 void nrn_property_push(Object* obj, const char* name);
143 void nrn_property_array_push(Object* obj, const char* name, int i);
144 char const* nrn_symbol_name(const Symbol* sym);
145 Symlist* nrn_symbol_table(const Symbol* sym);
148 int nrn_symbol_array_length(const Symbol* sym);
149 void nrn_register_function(void (*proc)(), const char* func_name, int type);
150 void nrn_hoc_ret(void);
151 
152 /****************************************
153  * Parameter-reading functions
154  ****************************************/
155 Object** nrn_objgetarg(int arg);
156 char* nrn_gargstr(int arg);
157 double* nrn_getarg(int arg);
158 FILE* nrn_obj_file_arg(int i);
159 bool nrn_ifarg(int arg);
160 bool nrn_is_object_arg(int arg);
161 bool nrn_is_str_arg(int arg);
162 bool nrn_is_double_arg(int arg);
163 bool nrn_is_pdouble_arg(int arg);
164 
165 #ifdef __cplusplus
166 }
167 #endif
#define sec
Definition: md1redef.h:20
#define i
Definition: md1redef.h:19
static int argc
Definition: inithoc.cpp:45
static char ** argv
Definition: inithoc.cpp:46
static int narg()
Definition: ivocvect.cpp:121
const char * name
Definition: init.cpp:16
static const char * mechanism[]
Definition: capac.cpp:19
double nrn_rangevar_get(Symbol *sym, Section *sec, double x)
Definition: neuronapi.cpp:207
Section * nrn_cas(void)
Definition: neuronapi.cpp:166
void nrn_segment_diam_set(Section *sec, double x, double diam)
Definition: neuronapi.cpp:184
FILE * nrn_obj_file_arg(int i)
Definition: neuronapi.cpp:701
float nrn_get_plotshape_high(ShapePlotInterface *spi)
Definition: neuronapi.cpp:461
SectionListIterator * nrn_sectionlist_iterator_new(nrn_Item *my_sectionlist)
Definition: neuronapi.cpp:532
void nrn_section_pop(void)
Definition: neuronapi.cpp:142
void nrn_int_push(int i)
Definition: neuronapi.cpp:282
void nrn_section_ref(Section *sec)
Definition: neuronapi.cpp:158
void nrn_section_rallbranch_set(Section *sec, double val)
Definition: neuronapi.cpp:127
void nrn_property_push(Object *obj, const char *name)
Definition: neuronapi.cpp:626
double nrn_double_pop(void)
Definition: neuronapi.cpp:262
SymbolTableIterator * nrn_symbol_table_iterator_new(Symlist *my_symbol_table)
Definition: neuronapi.cpp:548
char * nrn_gargstr(int arg)
Definition: neuronapi.cpp:693
Object * nrn_object_pop(void)
Definition: neuronapi.cpp:294
int nrn_hoc_call(char const *command)
Definition: neuronapi.cpp:468
bool nrn_is_object_arg(int arg)
Definition: neuronapi.cpp:710
double nrn_section_Ra_get(Section *sec)
Definition: neuronapi.cpp:111
int nrn_nseg_get(const Section *sec)
Definition: neuronapi.cpp:175
Symlist * nrn_top_level_symbol_table(void)
Definition: neuronapi.cpp:665
float nrn_get_plotshape_low(ShapePlotInterface *spi)
Definition: neuronapi.cpp:457
void nrn_nseg_set(Section *sec, int nseg)
Definition: neuronapi.cpp:180
void nrn_double_ptr_push(double *addr)
Definition: neuronapi.cpp:266
void nrn_section_unref(Section *sec)
Definition: neuronapi.cpp:162
bool nrn_prop_exists(const Object *obj)
Definition: neuronapi.cpp:426
Symbol * nrn_method_symbol(const Object *obj, const char *name)
Definition: neuronapi.cpp:348
void nrn_register_function(void(*proc)(), const char *func_name, int type)
Definition: neuronapi.cpp:674
void nrn_method_call(Object *obj, Symbol *method_sym, int narg)
Definition: neuronapi.cpp:352
void nrn_symbol_table_iterator_free(SymbolTableIterator *st)
Definition: neuronapi.cpp:552
double nrn_property_array_get(const Object *obj, const char *name, int i)
Definition: neuronapi.cpp:587
int nrn_symbol_subtype(const Symbol *sym)
Definition: neuronapi.cpp:242
int nrn_init(int argc, const char **argv)
Definition: neuronapi.cpp:57
Object * nrn_get_plotshape_section_list(ShapePlotInterface *spi)
Definition: neuronapi.cpp:449
void nrn_section_push(Section *sec)
Definition: neuronapi.cpp:138
int nrn_int_pop(void)
Definition: neuronapi.cpp:286
bool nrn_symbol_is_array(const Symbol *sym)
Definition: neuronapi.cpp:250
nrn_Item * nrn_sectionlist_data(const Object *obj)
Definition: neuronapi.cpp:223
nrn_stack_types_t nrn_stack_type(void)
Definition: neuronapi.cpp:303
char const * nrn_symbol_name(const Symbol *sym)
Definition: neuronapi.cpp:651
bool nrn_is_double_arg(int arg)
Definition: neuronapi.cpp:720
void nrn_rangevar_set(Symbol *sym, Section *sec, double x, double value)
Definition: neuronapi.cpp:211
void nrn_section_Ra_set(Section *sec, double val)
Definition: neuronapi.cpp:115
double nrn_segment_diam_get(Section *sec, double x)
Definition: neuronapi.cpp:197
const char * nrn_get_plotshape_varname(ShapePlotInterface *spi)
Definition: neuronapi.cpp:453
bool nrn_is_str_arg(int arg)
Definition: neuronapi.cpp:715
void nrn_hoc_ret(void)
Definition: neuronapi.cpp:682
void nrn_stdout_redirect(int(*myprint)(int, char *))
Definition: neuronapi.cpp:64
Symbol * nrn_symbol_table_iterator_next(SymbolTableIterator *st)
Definition: neuronapi.cpp:556
int nrn_symbol_table_iterator_done(SymbolTableIterator *st)
Definition: neuronapi.cpp:560
Object ** nrn_objgetarg(int arg)
Definition: neuronapi.cpp:689
double nrn_property_get(const Object *obj, const char *name)
Definition: neuronapi.cpp:574
double nrn_section_length_get(Section *sec)
Definition: neuronapi.cpp:107
void nrn_rangevar_push(Symbol *sym, Section *sec, double x)
Definition: neuronapi.cpp:215
ShapePlotInterface * nrn_get_plotshape_interface(Object *ps)
Definition: neuronapi.cpp:442
void nrn_property_array_set(Object *obj, const char *name, int i, double value)
Definition: neuronapi.cpp:613
Object * nrn_object_new(Symbol *sym, int narg)
Definition: neuronapi.cpp:344
int nrn_function_call_nothrow(Symbol *sym, int narg, char *error_msg, size_t error_msg_size)
Definition: neuronapi.cpp:390
Symlist * nrn_symbol_table(const Symbol *sym)
Definition: neuronapi.cpp:655
double * nrn_double_ptr_pop(void)
Definition: neuronapi.cpp:270
char const * nrn_stack_type_name(nrn_stack_types_t id)
Definition: neuronapi.cpp:323
double * nrn_symbol_dataptr(const Symbol *sym)
Definition: neuronapi.cpp:246
nrn_Item * nrn_allsec(void)
Definition: neuronapi.cpp:219
Symlist * nrn_global_symbol_table(void)
Definition: neuronapi.cpp:661
void nrn_section_connect(Section *child_sec, double child_x, Section *parent_sec, double parent_x)
Definition: neuronapi.cpp:88
Section * nrn_section_new(const char *name)
Definition: neuronapi.cpp:75
nrn_stack_types_t
Definition: neuronapi.h:25
@ STACK_UNKNOWN
Definition: neuronapi.h:33
@ STACK_IS_NUM
Definition: neuronapi.h:28
@ STACK_IS_VAR
Definition: neuronapi.h:27
@ STACK_IS_STR
Definition: neuronapi.h:26
@ STACK_IS_OBJVAR
Definition: neuronapi.h:29
@ STACK_IS_INT
Definition: neuronapi.h:31
@ STACK_IS_OBJTMP
Definition: neuronapi.h:30
@ STACK_IS_SYM
Definition: neuronapi.h:32
double * nrn_vector_data(Object *vec)
Definition: neuronapi.cpp:569
Section * nrn_sectionlist_iterator_next(SectionListIterator *sl)
Definition: neuronapi.cpp:540
void nrn_property_array_push(Object *obj, const char *name, int i)
Definition: neuronapi.cpp:638
char const * nrn_secname(Section *sec)
Definition: neuronapi.cpp:134
void nrn_object_push(Object *obj)
Definition: neuronapi.cpp:290
int nrn_sectionlist_iterator_done(SectionListIterator *sl)
Definition: neuronapi.cpp:544
char const * nrn_class_name(const Object *obj)
Definition: neuronapi.cpp:422
int nrn_symbol_type(const Symbol *sym)
Definition: neuronapi.cpp:236
void nrn_object_ref(Object *obj)
Definition: neuronapi.cpp:414
void nrn_function_call(Symbol *sym, int narg)
Definition: neuronapi.cpp:356
int nrn_symbol_array_length(const Symbol *sym)
Definition: neuronapi.cpp:669
void nrn_property_set(Object *obj, const char *name, double value)
Definition: neuronapi.cpp:600
void nrn_object_unref(Object *obj)
Definition: neuronapi.cpp:418
Symbol * nrn_symbol(const char *name)
Definition: neuronapi.cpp:232
char ** nrn_str_pop(void)
Definition: neuronapi.cpp:278
int nrn_vector_capacity(const Object *vec)
Definition: neuronapi.cpp:564
void nrn_double_push(double val)
Definition: neuronapi.cpp:258
void nrn_sectionlist_iterator_free(SectionListIterator *sl)
Definition: neuronapi.cpp:536
bool nrn_section_is_active(const Section *sec)
Definition: neuronapi.cpp:151
void nrn_symbol_push(Symbol *sym)
Definition: neuronapi.cpp:254
void nrn_mechanism_insert(Section *sec, const Symbol *mechanism)
Definition: neuronapi.cpp:146
double nrn_section_rallbranch_get(const Section *sec)
Definition: neuronapi.cpp:123
double nrn_distance(Section *sec0, double x0, Section *sec1, double x1)
Definition: neuronapi.cpp:430
void nrn_str_push(char **str)
Definition: neuronapi.cpp:274
int nrn_method_call_nothrow(Object *obj, Symbol *method_sym, int narg, char *error_msg, size_t error_msg_size)
Definition: neuronapi.cpp:362
bool nrn_ifarg(int arg)
Definition: neuronapi.cpp:705
bool nrn_is_pdouble_arg(int arg)
Definition: neuronapi.cpp:725
void nrn_section_length_set(Section *sec, double length)
Definition: neuronapi.cpp:96
double * nrn_getarg(int arg)
Definition: neuronapi.cpp:697
short type
Definition: cabvars.h:10
static uint32_t value
Definition: scoprand.cpp:25
Definition: hocdec.h:173
Definition: model.h:47
Definition: hocdec.h:75
A public face of hoc_Item.
Definition: neuronapi.cpp:18