/** * Test iterator referenced data is within the slist. */ bool_t _slist_iterator_belong_to_slist(const slist_t* cpslist_slist, slist_iterator_t it_iter) { _slistnode_t* pt_node = NULL; assert(cpslist_slist != NULL); assert(_slist_is_inited(cpslist_slist)); assert(_SLIST_ITERATOR_CONTAINER(it_iter) == cpslist_slist); assert(_SLIST_ITERATOR_CONTAINER_TYPE(it_iter) == _SLIST_CONTAINER); assert(_SLIST_ITERATOR_ITERATOR_TYPE(it_iter) == _FORWARD_ITERATOR); /* the end iterator of slist corepos is NULL */ if(_SLIST_ITERATOR_COREPOS(it_iter) == NULL) { return true; } for(pt_node = cpslist_slist->_t_head._pt_next; pt_node != NULL; pt_node = pt_node->_pt_next) { if(pt_node == (_slistnode_t*)_SLIST_ITERATOR_COREPOS(it_iter)) { return true; } } return false; }
/** * Test the type that saved in the slist container and referenced by it_iter are same. */ bool_t _slist_same_slist_iterator_type(const slist_t* cpslist_slist, slist_iterator_t it_iter) { assert(cpslist_slist != NULL); assert(_SLIST_ITERATOR_CONTAINER(it_iter) != NULL); assert(_SLIST_ITERATOR_CONTAINER_TYPE(it_iter) == _SLIST_CONTAINER); assert(_SLIST_ITERATOR_ITERATOR_TYPE(it_iter) == _FORWARD_ITERATOR); return _slist_same_type(cpslist_slist, _SLIST_ITERATOR_CONTAINER(it_iter)); }
/** * Create slist iterator. */ slist_iterator_t _create_slist_iterator(void) { slist_iterator_t it_iter; _SLIST_ITERATOR_ITERATOR_TYPE(it_iter) = _FORWARD_ITERATOR; _SLIST_ITERATOR_CONTAINER_TYPE(it_iter) = _SLIST_CONTAINER; _ITERATOR_CONTAINER(it_iter) = NULL; _SLIST_ITERATOR_COREPOS(it_iter) = NULL; return it_iter; }