__normal_call bool_type circ_list ( real_type *_ppos, iptr_type &_elem, list_type &_list, iptr_type _hint = null_flag() ) { this->_work.clear(); /*--------------------------- find enclosing tria */ if (walk_mesh_node(_ppos, _elem, _hint)) { /*------------------------------ bfs about cavity */ typename tria_pred:: template circ_pred< self_type >_pred( _ppos) ; walk_tria_list (_elem, +1, _pred, _work) ; /*------------------------------ push index lists */ _list.push_tail(_work.head(), _work.tend()) ; return ( true ) ; } return ( false ) ; }
__normal_call bool_type find ( data_type const&_data, list_type &_list ) { if (this->_lptr.empty()) return false; /*------------------------------- evaluate hash value */ size_type _hpos = this->_hash(_data ) % this->_lptr.count(); /*------------------------------- scan list from head */ item_type*_same = this->_lptr[_hpos] ; /*------------------------------- check exact matches */ for( ; _same != nullptr; _same = _same->_next) { if (this->_pred(_same->_data,_data)) { _list.push_tail(_same); } } /*---------------------------------- no matches found */ return ( !_list.empty() ); }
__normal_call void_type walk_tria ( iptr_type _tria , tria_pred _pred , list_type &_list ) { this->_work.clear() ; /*----------------------------------- bfs about _tria */ walk_tria_list (_tria, +1, _pred, _work) ; /*----------------------------------- push index list */ _list.push_tail(_work.head(), _work.tend()) ; }
__normal_call void_type walk_node ( iptr_type _node , tria_pred _pred , list_type &_list ) { if (node(_node)-> next() != this->null_flag()) { this->_work.clear() ; /*----------------------------------- bfs about _node */ walk_tria_list ( node(_node)->next(), +1 , _pred, _work) ; /*----------------------------------- push index list */ _list.push_tail(_work.head(), _work.tend()) ; } }