src/tree.c

branch
feature/tree_add
changeset 860
558ed4c6abd0
parent 854
fe0d69d72bcd
child 863
4a220afebad0
equal deleted inserted replaced
859:6367456bf2d9 860:558ed4c6abd0
397 iter.base.current = cx_tree_visitor_current; 397 iter.base.current = cx_tree_visitor_current;
398 398
399 return iter; 399 return iter;
400 } 400 }
401 401
402 void *cx_tree_add(
403 void const *src,
404 cx_tree_search_func sfunc,
405 cx_tree_node_create_fun cfunc,
406 void **root,
407 ptrdiff_t loc_parent,
408 ptrdiff_t loc_children,
409 ptrdiff_t loc_prev,
410 ptrdiff_t loc_next
411 ) {
412 // TODO: implement
413 return NULL;
414 }
415
416 size_t cx_tree_add_iter(
417 struct cx_iterator_base_s *iter,
418 cx_tree_search_func sfunc,
419 cx_tree_node_create_fun cfunc,
420 void **root,
421 ptrdiff_t loc_parent,
422 ptrdiff_t loc_children,
423 ptrdiff_t loc_prev,
424 ptrdiff_t loc_next
425 ) {
426 // TODO: implement
427 return 0;
428 }
429
430 size_t cx_tree_add_array(
431 void const *src,
432 size_t num,
433 size_t elem_size,
434 cx_tree_search_func sfunc,
435 cx_tree_node_create_fun cfunc,
436 void **root,
437 ptrdiff_t loc_parent,
438 ptrdiff_t loc_children,
439 ptrdiff_t loc_prev,
440 ptrdiff_t loc_next
441 ) {
442 // super special case: zero elements
443 if (num == 0) {
444 return 0;
445 }
446
447 // special case: one element does not need an iterator
448 if (num == 1) {
449 if (NULL != cx_tree_add(
450 src, sfunc, cfunc, root,
451 loc_parent, loc_children, loc_prev, loc_next)) {
452 return 1;
453 } else {
454 return 0;
455 }
456 }
457
458 // otherwise, create iterator and hand over to other function
459 CxIterator iter = cxIterator(src, elem_size, num);
460 return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, root,
461 loc_parent, loc_children, loc_prev, loc_next);
462 }
463

mercurial