예제 #1
0
    __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 ) ;
    }
예제 #2
0
 __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() );
 }
예제 #3
0
	__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()) ;
	}
예제 #4
0
	__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()) ;
        }
    }