diff options
author | Adrian Thurston <thurston@complang.org> | 2015-06-05 10:26:36 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-06-05 10:26:36 -0400 |
commit | db0fd98a4f646abef622684d4228d879a933cbce (patch) | |
tree | b8a7662b964b597ae91e05dae7247caf2d5afe27 /src/iter.c | |
parent | 009deb74e036c25053246ce9b8a21069f8440834 (diff) | |
download | colm-db0fd98a4f646abef622684d4228d879a933cbce.tar.gz |
more of the vlist implementation .. moved all test cases to vlist
Diffstat (limited to 'src/iter.c')
-rw-r--r-- | src/iter.c | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -88,6 +88,37 @@ tree_t *colm_list_iter_advance( program_t *prg, tree_t ***psp, generic_iter_t *i return (iter->ref.kid ? prg->true_val : prg->false_val ); } +tree_t *colm_rev_list_iter_advance( program_t *prg, tree_t ***psp, generic_iter_t *iter ) +{ + tree_t **sp = *psp; + assert( iter->yield_size == (vm_ssize() - iter->root_size) ); + + if ( iter->ref.kid == 0 ) { + /* kid_t is zero, start from the root. */ + list_t *list = *((list_t**)iter->root_ref.kid); + iter->ref.kid = (kid_t*)list->tail; + iter->ref.next = 0; + + //= iter->rootRef; + //iter + //iterFind( prg, psp, iter, true ); + } + else { + /* Have a previous item, continue searching from there. */ + //iterFind( prg, psp, iter, false ); + + list_el_t *list_el = (list_el_t*)iter->ref.kid; + list_el = list_el->list_prev; + iter->ref.kid = (kid_t*)list_el; + iter->ref.next = 0; + } + + sp = *psp; + iter->yield_size = vm_ssize() - iter->root_size; + + return (iter->ref.kid ? prg->true_val : prg->false_val ); +} + tree_t *colm_map_iter_advance( program_t *prg, tree_t ***psp, generic_iter_t *iter ) { tree_t **sp = *psp; |