11#include < ../../nrnconf.h>
22
3- #include < functional>
4-
53#define HOC_L_LIST 1
64#include " section.h"
75#include " neuron.h"
@@ -63,7 +61,7 @@ static void* constructor(Object* ho) {
6361
6462static void destructor (void * v) {
6563 Item* q;
66- List* sl = ( List*) v ;
64+ List* sl = static_cast < List*>(v) ;
6765 ITERATE (q, sl) {
6866 section_unref (q->element .sec );
6967 }
@@ -97,10 +95,8 @@ static void children1(List* sl, Section* sec) {
9795}
9896
9997static double children (void * v) {
100- Section* sec;
101- List* sl;
102- sec = nrn_secarg (1 );
103- sl = (List*) v;
98+ Section* sec = nrn_secarg (1 );
99+ List* sl = static_cast <List*>(v);
104100 children1 (sl, sec);
105101 return 1 .;
106102}
@@ -121,17 +117,15 @@ static void subtree1(List* sl, Section* sec) {
121117}
122118
123119static double subtree (void * v) {
124- Section* sec;
125- List* sl;
126- sec = nrn_secarg (1 );
127- sl = (List*) v;
120+ Section* sec = nrn_secarg (1 );
121+ List* sl = static_cast <List*>(v);
128122 subtree1 (sl, sec);
129123 return 1 .;
130124}
131125
132126static double wholetree (void * v) {
133127 Section* sec = nrn_secarg (1 );
134- List* sl = ( List*) v ;
128+ List* sl = static_cast < List*>(v) ;
135129 /* find root*/
136130 Section* s = nullptr ;
137131 for (s = sec; s->parentsec ; s = s->parentsec ) {
@@ -142,10 +136,8 @@ static double wholetree(void* v) {
142136}
143137
144138static double allroots (void * v) {
145- List* sl;
139+ List* sl = static_cast <List*>(v) ;
146140 Item* qsec;
147- sl = (List*) v;
148- // ForAllSections(sec)
149141 ITERATE (qsec, section_list) {
150142 Section* sec = hocSEC (qsec);
151143 if (!sec->parentsec ) {
@@ -158,7 +150,7 @@ static double allroots(void* v) {
158150}
159151
160152static double seclist_remove (void * v) {
161- List* sl = ( List*) v ;
153+ List* sl = static_cast < List*>(v) ;
162154 int i = 0 ;
163155#if USE_PYTHON
164156 if (!ifarg (1 ) || (*hoc_objgetarg (1 ))->ctemplate ->sym == nrnpy_pyobj_sym_) {
@@ -182,9 +174,9 @@ static double seclist_remove(void* v) {
182174 o = *hoc_objgetarg (1 );
183175 check_obj_type (o, " SectionList" );
184176 seclist_iterate_remove (sl, [](Section* s) { s->volatile_mark = 0 ; });
185- sl = ( List*) o->u .this_pointer ;
177+ sl = static_cast < List*>( o->u .this_pointer ) ;
186178 seclist_iterate_remove (sl, [](Section* s) { s->volatile_mark = 1 ; });
187- sl = ( List*) v ;
179+ sl = static_cast < List*>(v) ;
188180 Item* q1;
189181 for (Item* q = sl->next ; q != sl; q = q1) {
190182 q1 = q->next ;
@@ -200,8 +192,8 @@ static double seclist_remove(void* v) {
200192}
201193
202194static double unique (void * v) {
203- Item* q1;
204- List* sl = ( List*) v ;
195+ Item* q1 = nullptr ;
196+ List* sl = static_cast < List*>(v) ;
205197 hoc_return_type_code = 1 ; /* integer */
206198 seclist_iterate_remove (sl, [](Section* s) { s->volatile_mark = 0 ; });
207199 int i = 0 ; /* number deleted */
@@ -218,7 +210,7 @@ static double unique(void* v) {
218210}
219211
220212static double contains (void * v) {
221- List* sl = ( List*) v ;
213+ List* sl = static_cast < List*>(v) ;
222214 hoc_return_type_code = 2 ; /* boolean */
223215 Section* s = nrn_secarg (1 );
224216 return seclist_iterate_remove_until (
@@ -228,7 +220,7 @@ static double contains(void* v) {
228220}
229221
230222static double printnames (void * v) {
231- List* sl = ( List*) v ;
223+ List* sl = static_cast < List*>(v) ;
232224 seclist_iterate_remove (sl, [](Section* s) {
233225 if (s->prop ) {
234226 Printf (" %s\n " , secname (s));
@@ -237,6 +229,15 @@ static double printnames(void* v) {
237229 return 1 .;
238230}
239231
232+ double seclist_size (void * v) {
233+ double count = 0 .;
234+ List* sl = static_cast <List*>(v);
235+ for (Item* q1 = sl->next ; q1 != sl; q1 = q1->next ) {
236+ count++;
237+ }
238+ return count;
239+ }
240+
240241static Member_func members[] = {{" append" , append},
241242 {" remove" , seclist_remove},
242243 {" wholetree" , wholetree},
@@ -246,6 +247,7 @@ static Member_func members[] = {{"append", append},
246247 {" printnames" , printnames},
247248 {" contains" , contains},
248249 {" allroots" , allroots},
250+ {" size" , seclist_size},
249251 {nullptr , nullptr }};
250252
251253void SectionList_reg (void ) {
@@ -265,28 +267,24 @@ static void check(Object* ob) {
265267 }
266268}
267269
268- void forall_sectionlist (void ) {
269- Inst* savepc = pc;
270- Item *q, *q1;
271- Section* sec;
272- List* sl;
273- Object* ob;
274- Object** obp;
275- int istk;
276-
270+ void forall_sectionlist () {
277271 /* if arg is a string use forall_section */
278272 if (hoc_stacktype () == STRING ) {
279273 forall_section ();
280274 return ;
281275 }
282- obp = hoc_objpop ();
283- ob = *obp;
276+
277+ Inst* savepc = pc;
278+ Object** obp = hoc_objpop ();
279+ Object* ob = *obp;
284280 check (ob);
285- sl = (List*) (ob->u .this_pointer );
286- istk = nrn_isecstack ();
287- for (q = sl->next ; q != sl; q = q1) {
281+ List* sl = static_cast <List*>(ob->u .this_pointer );
282+ int istk = nrn_isecstack ();
283+
284+ Item* q1;
285+ for (Item* q = sl->next ; q != sl; q = q1) {
288286 q1 = q->next ;
289- sec = q->element .sec ;
287+ Section* sec = q->element .sec ;
290288 if (!sec->prop ) {
291289 hoc_l_delete (q);
292290 section_unref (sec);
@@ -313,19 +311,19 @@ void forall_sectionlist(void) {
313311 }
314312}
315313
316- void hoc_ifseclist (void ) {
317- Inst* savepc = pc;
318- Section* sec = chk_access ();
319-
314+ void hoc_ifseclist () {
320315 /* if arg is a string use forall_section */
321316 if (hoc_stacktype () == STRING ) {
322317 hoc_ifsec ();
323318 return ;
324319 }
320+
321+ Inst* savepc = pc;
322+ Section* sec = chk_access ();
325323 Object** obp = hoc_objpop ();
326324 Object* ob = *obp;
327325 check (ob);
328- List* sl = ( List*) (ob->u .this_pointer );
326+ List* sl = static_cast < List*> (ob->u .this_pointer );
329327 if (seclist_iterate_remove_until (
330328 sl,
331329 [&](Item*) {
0 commit comments