src/tree.c

branch
feature/tree_add
changeset 864
7d3061f212cb
parent 863
4a220afebad0
child 866
1f636de4a63f
equal deleted inserted replaced
863:4a220afebad0 864:7d3061f212cb
427 } 427 }
428 428
429 void *cx_tree_add( 429 void *cx_tree_add(
430 void const *src, 430 void const *src,
431 cx_tree_search_func sfunc, 431 cx_tree_search_func sfunc,
432 cx_tree_node_create_fun cfunc, 432 cx_tree_node_create_func cfunc,
433 void *cdata,
433 void **root, 434 void **root,
434 ptrdiff_t loc_parent, 435 ptrdiff_t loc_parent,
435 ptrdiff_t loc_children, 436 ptrdiff_t loc_children,
437 ptrdiff_t loc_last_child,
436 ptrdiff_t loc_prev, 438 ptrdiff_t loc_prev,
437 ptrdiff_t loc_next 439 ptrdiff_t loc_next
438 ) { 440 ) {
439 // TODO: implement 441 // TODO: implement
440 return NULL; 442 return NULL;
441 } 443 }
444
445 unsigned int cx_tree_add_look_around_depth = 3;
442 446
443 size_t cx_tree_add_iter( 447 size_t cx_tree_add_iter(
444 struct cx_iterator_base_s *iter, 448 struct cx_iterator_base_s *iter,
445 cx_tree_search_func sfunc, 449 cx_tree_search_func sfunc,
446 cx_tree_node_create_fun cfunc, 450 cx_tree_node_create_func cfunc,
451 void *cdata,
447 void **root, 452 void **root,
448 ptrdiff_t loc_parent, 453 ptrdiff_t loc_parent,
449 ptrdiff_t loc_children, 454 ptrdiff_t loc_children,
455 ptrdiff_t loc_last_child,
450 ptrdiff_t loc_prev, 456 ptrdiff_t loc_prev,
451 ptrdiff_t loc_next 457 ptrdiff_t loc_next
452 ) { 458 ) {
453 // TODO: implement 459 // TODO: implement
454 return 0; 460 return 0;
457 size_t cx_tree_add_array( 463 size_t cx_tree_add_array(
458 void const *src, 464 void const *src,
459 size_t num, 465 size_t num,
460 size_t elem_size, 466 size_t elem_size,
461 cx_tree_search_func sfunc, 467 cx_tree_search_func sfunc,
462 cx_tree_node_create_fun cfunc, 468 cx_tree_node_create_func cfunc,
469 void *cdata,
463 void **root, 470 void **root,
464 ptrdiff_t loc_parent, 471 ptrdiff_t loc_parent,
465 ptrdiff_t loc_children, 472 ptrdiff_t loc_children,
473 ptrdiff_t loc_last_child,
466 ptrdiff_t loc_prev, 474 ptrdiff_t loc_prev,
467 ptrdiff_t loc_next 475 ptrdiff_t loc_next
468 ) { 476 ) {
469 // super special case: zero elements 477 // super special case: zero elements
470 if (num == 0) { 478 if (num == 0) {
472 } 480 }
473 481
474 // special case: one element does not need an iterator 482 // special case: one element does not need an iterator
475 if (num == 1) { 483 if (num == 1) {
476 if (NULL != cx_tree_add( 484 if (NULL != cx_tree_add(
477 src, sfunc, cfunc, root, 485 src, sfunc, cfunc, cdata, root,
478 loc_parent, loc_children, loc_prev, loc_next)) { 486 loc_parent, loc_children, loc_last_child,
487 loc_prev, loc_next)) {
479 return 1; 488 return 1;
480 } else { 489 } else {
481 return 0; 490 return 0;
482 } 491 }
483 } 492 }
484 493
485 // otherwise, create iterator and hand over to other function 494 // otherwise, create iterator and hand over to other function
486 CxIterator iter = cxIterator(src, elem_size, num); 495 CxIterator iter = cxIterator(src, elem_size, num);
487 return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, root, 496 return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, cdata, root,
488 loc_parent, loc_children, loc_prev, loc_next); 497 loc_parent, loc_children, loc_last_child,
489 } 498 loc_prev, loc_next);
490 499 }
500

mercurial