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 int nrn_segment_node_index(Section* sec, double x);
72 void nrn_rangevar_push(Symbol* sym, Section* sec, double x);
73 double nrn_rangevar_get(Symbol* sym, Section* sec, double x);
74 void nrn_rangevar_set(Symbol* sym, Section* sec, double x, double value);
75 
76 /****************************************
77  * Functions, objects, and the stack
78  ****************************************/
79 Symbol* nrn_symbol(const char* name);
80 void nrn_symbol_push(Symbol* sym);
81 int nrn_symbol_type(const Symbol* sym);
82 int nrn_symbol_subtype(const Symbol* sym);
83 double* nrn_symbol_dataptr(const Symbol* sym);
84 bool nrn_symbol_is_array(const Symbol* sym);
85 void nrn_double_push(double val);
86 double nrn_double_pop(void);
87 void nrn_double_ptr_push(double* addr);
88 double* nrn_double_ptr_pop(void);
89 void nrn_str_push(char** str);
90 char** nrn_str_pop(void);
91 void nrn_int_push(int i);
92 int nrn_int_pop(void);
93 void nrn_object_push(Object* obj);
94 Object* nrn_object_pop(void);
97 Object* nrn_object_new(Symbol* sym, int narg);
98 Symbol* nrn_method_symbol(const Object* obj, const char* name);
99 // TODO: the next two functions throw exceptions in C++; need a version that
100 // returns a bool success indicator instead (this is actually the
101 // classic behavior of OcJump)
102 void nrn_method_call(Object* obj, Symbol* method_sym, int narg);
103 void nrn_function_call(Symbol* sym, int narg);
105  Symbol* method_sym,
106  int narg,
107  char* error_msg,
108  size_t error_msg_size);
109 int nrn_function_call_nothrow(Symbol* sym, int narg, char* error_msg, size_t error_msg_size);
110 void nrn_object_ref(Object* obj);
111 void nrn_object_unref(Object* obj);
112 char const* nrn_class_name(const Object* obj);
113 bool nrn_prop_exists(const Object* obj);
114 double nrn_distance(Section* sec0, double x0, Section* sec1, double x1);
115 
116 /****************************************
117  * Shape Plot
118  ****************************************/
124 
125 /****************************************
126  * Miscellaneous
127  ****************************************/
128 int nrn_hoc_call(char const* command);
137 int nrn_vector_capacity(const Object* vec);
138 double* nrn_vector_data(Object* vec);
139 double nrn_property_get(const Object* obj, const char* name);
140 double nrn_property_array_get(const Object* obj, const char* name, int i);
141 void nrn_property_set(Object* obj, const char* name, double value);
142 void nrn_property_array_set(Object* obj, const char* name, int i, double value);
143 void nrn_property_push(Object* obj, const char* name);
144 void nrn_property_array_push(Object* obj, const char* name, int i);
145 char const* nrn_symbol_name(const Symbol* sym);
146 Symlist* nrn_symbol_table(const Symbol* sym);
149 int nrn_symbol_array_length(const Symbol* sym);
150 void nrn_register_function(void (*proc)(), const char* func_name, int type);
151 void nrn_hoc_ret(void);
152 
153 /****************************************
154  * Parameter-reading functions
155  ****************************************/
156 Object** nrn_objgetarg(int arg);
157 char* nrn_gargstr(int arg);
158 double* nrn_getarg(int arg);
159 FILE* nrn_obj_file_arg(int i);
160 bool nrn_ifarg(int arg);
161 bool nrn_is_object_arg(int arg);
162 bool nrn_is_str_arg(int arg);
163 bool nrn_is_double_arg(int arg);
164 bool nrn_is_pdouble_arg(int arg);
165 
166 #ifdef __cplusplus
167 }
168 #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:221
Section * nrn_cas(void)
Definition: neuronapi.cpp:167
void nrn_segment_diam_set(Section *sec, double x, double diam)
Definition: neuronapi.cpp:185
FILE * nrn_obj_file_arg(int i)
Definition: neuronapi.cpp:727
float nrn_get_plotshape_high(ShapePlotInterface *spi)
Definition: neuronapi.cpp:487
SectionListIterator * nrn_sectionlist_iterator_new(nrn_Item *my_sectionlist)
Definition: neuronapi.cpp:558
void nrn_section_pop(void)
Definition: neuronapi.cpp:143
void nrn_int_push(int i)
Definition: neuronapi.cpp:308
void nrn_section_ref(Section *sec)
Definition: neuronapi.cpp:159
void nrn_section_rallbranch_set(Section *sec, double val)
Definition: neuronapi.cpp:128
void nrn_property_push(Object *obj, const char *name)
Definition: neuronapi.cpp:652
double nrn_double_pop(void)
Definition: neuronapi.cpp:288
SymbolTableIterator * nrn_symbol_table_iterator_new(Symlist *my_symbol_table)
Definition: neuronapi.cpp:574
char * nrn_gargstr(int arg)
Definition: neuronapi.cpp:719
Object * nrn_object_pop(void)
Definition: neuronapi.cpp:320
int nrn_hoc_call(char const *command)
Definition: neuronapi.cpp:494
bool nrn_is_object_arg(int arg)
Definition: neuronapi.cpp:736
double nrn_section_Ra_get(Section *sec)
Definition: neuronapi.cpp:112
int nrn_nseg_get(const Section *sec)
Definition: neuronapi.cpp:176
Symlist * nrn_top_level_symbol_table(void)
Definition: neuronapi.cpp:691
float nrn_get_plotshape_low(ShapePlotInterface *spi)
Definition: neuronapi.cpp:483
void nrn_nseg_set(Section *sec, int nseg)
Definition: neuronapi.cpp:181
void nrn_double_ptr_push(double *addr)
Definition: neuronapi.cpp:292
void nrn_section_unref(Section *sec)
Definition: neuronapi.cpp:163
bool nrn_prop_exists(const Object *obj)
Definition: neuronapi.cpp:452
Symbol * nrn_method_symbol(const Object *obj, const char *name)
Definition: neuronapi.cpp:374
void nrn_register_function(void(*proc)(), const char *func_name, int type)
Definition: neuronapi.cpp:700
void nrn_method_call(Object *obj, Symbol *method_sym, int narg)
Definition: neuronapi.cpp:378
void nrn_symbol_table_iterator_free(SymbolTableIterator *st)
Definition: neuronapi.cpp:578
double nrn_property_array_get(const Object *obj, const char *name, int i)
Definition: neuronapi.cpp:613
int nrn_symbol_subtype(const Symbol *sym)
Definition: neuronapi.cpp:256
int nrn_init(int argc, const char **argv)
Definition: neuronapi.cpp:58
Object * nrn_get_plotshape_section_list(ShapePlotInterface *spi)
Definition: neuronapi.cpp:475
void nrn_section_push(Section *sec)
Definition: neuronapi.cpp:139
int nrn_int_pop(void)
Definition: neuronapi.cpp:312
bool nrn_symbol_is_array(const Symbol *sym)
Definition: neuronapi.cpp:276
nrn_Item * nrn_sectionlist_data(const Object *obj)
Definition: neuronapi.cpp:237
nrn_stack_types_t nrn_stack_type(void)
Definition: neuronapi.cpp:329
char const * nrn_symbol_name(const Symbol *sym)
Definition: neuronapi.cpp:677
bool nrn_is_double_arg(int arg)
Definition: neuronapi.cpp:746
void nrn_rangevar_set(Symbol *sym, Section *sec, double x, double value)
Definition: neuronapi.cpp:225
void nrn_section_Ra_set(Section *sec, double val)
Definition: neuronapi.cpp:116
double nrn_segment_diam_get(Section *sec, double x)
Definition: neuronapi.cpp:198
const char * nrn_get_plotshape_varname(ShapePlotInterface *spi)
Definition: neuronapi.cpp:479
bool nrn_is_str_arg(int arg)
Definition: neuronapi.cpp:741
void nrn_hoc_ret(void)
Definition: neuronapi.cpp:708
void nrn_stdout_redirect(int(*myprint)(int, char *))
Definition: neuronapi.cpp:65
Symbol * nrn_symbol_table_iterator_next(SymbolTableIterator *st)
Definition: neuronapi.cpp:582
int nrn_symbol_table_iterator_done(SymbolTableIterator *st)
Definition: neuronapi.cpp:586
Object ** nrn_objgetarg(int arg)
Definition: neuronapi.cpp:715
double nrn_property_get(const Object *obj, const char *name)
Definition: neuronapi.cpp:600
double nrn_section_length_get(Section *sec)
Definition: neuronapi.cpp:108
void nrn_rangevar_push(Symbol *sym, Section *sec, double x)
Definition: neuronapi.cpp:229
ShapePlotInterface * nrn_get_plotshape_interface(Object *ps)
Definition: neuronapi.cpp:468
void nrn_property_array_set(Object *obj, const char *name, int i, double value)
Definition: neuronapi.cpp:639
Object * nrn_object_new(Symbol *sym, int narg)
Definition: neuronapi.cpp:370
int nrn_function_call_nothrow(Symbol *sym, int narg, char *error_msg, size_t error_msg_size)
Definition: neuronapi.cpp:416
Symlist * nrn_symbol_table(const Symbol *sym)
Definition: neuronapi.cpp:681
double * nrn_double_ptr_pop(void)
Definition: neuronapi.cpp:296
char const * nrn_stack_type_name(nrn_stack_types_t id)
Definition: neuronapi.cpp:349
double * nrn_symbol_dataptr(const Symbol *sym)
Definition: neuronapi.cpp:260
nrn_Item * nrn_allsec(void)
Definition: neuronapi.cpp:233
Symlist * nrn_global_symbol_table(void)
Definition: neuronapi.cpp:687
void nrn_section_connect(Section *child_sec, double child_x, Section *parent_sec, double parent_x)
Definition: neuronapi.cpp:89
Section * nrn_section_new(const char *name)
Definition: neuronapi.cpp:76
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:595
Section * nrn_sectionlist_iterator_next(SectionListIterator *sl)
Definition: neuronapi.cpp:566
void nrn_property_array_push(Object *obj, const char *name, int i)
Definition: neuronapi.cpp:664
char const * nrn_secname(Section *sec)
Definition: neuronapi.cpp:135
void nrn_object_push(Object *obj)
Definition: neuronapi.cpp:316
int nrn_sectionlist_iterator_done(SectionListIterator *sl)
Definition: neuronapi.cpp:570
char const * nrn_class_name(const Object *obj)
Definition: neuronapi.cpp:448
int nrn_symbol_type(const Symbol *sym)
Definition: neuronapi.cpp:250
void nrn_object_ref(Object *obj)
Definition: neuronapi.cpp:440
void nrn_function_call(Symbol *sym, int narg)
Definition: neuronapi.cpp:382
int nrn_symbol_array_length(const Symbol *sym)
Definition: neuronapi.cpp:695
void nrn_property_set(Object *obj, const char *name, double value)
Definition: neuronapi.cpp:626
void nrn_object_unref(Object *obj)
Definition: neuronapi.cpp:444
Symbol * nrn_symbol(const char *name)
Definition: neuronapi.cpp:246
char ** nrn_str_pop(void)
Definition: neuronapi.cpp:304
int nrn_vector_capacity(const Object *vec)
Definition: neuronapi.cpp:590
void nrn_double_push(double val)
Definition: neuronapi.cpp:284
void nrn_sectionlist_iterator_free(SectionListIterator *sl)
Definition: neuronapi.cpp:562
bool nrn_section_is_active(const Section *sec)
Definition: neuronapi.cpp:152
void nrn_symbol_push(Symbol *sym)
Definition: neuronapi.cpp:280
void nrn_mechanism_insert(Section *sec, const Symbol *mechanism)
Definition: neuronapi.cpp:147
double nrn_section_rallbranch_get(const Section *sec)
Definition: neuronapi.cpp:124
double nrn_distance(Section *sec0, double x0, Section *sec1, double x1)
Definition: neuronapi.cpp:456
void nrn_str_push(char **str)
Definition: neuronapi.cpp:300
int nrn_method_call_nothrow(Object *obj, Symbol *method_sym, int narg, char *error_msg, size_t error_msg_size)
Definition: neuronapi.cpp:388
bool nrn_ifarg(int arg)
Definition: neuronapi.cpp:731
bool nrn_is_pdouble_arg(int arg)
Definition: neuronapi.cpp:751
void nrn_section_length_set(Section *sec, double length)
Definition: neuronapi.cpp:97
double * nrn_getarg(int arg)
Definition: neuronapi.cpp:723
int nrn_segment_node_index(Section *sec, double x)
Definition: neuronapi.cpp:214
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:19