⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 implementation.h

📁 高效的c++科学算法库
💻 H
📖 第 1 页 / 共 2 页
字号:
    inline Index    SymmetricSkyline::map_fast( Index const& row, Index const& col ) const    {        return my_diag(col)+col-row;    }        // ----------------------------------------------------------------------      //                                                                  map()      // ----------------------------------------------------------------------    Index    SymmetricSkyline::map( Index const& row, Index const& col ) const    {        assert( MinIndex <= row && row <= my_n );        assert( MinIndex <= col && col <= my_n );              if( col >= row )            {                if( col-row < my_haut(col) )                    return map_fast(row,col);                else                     return 0;            }        else            {                if( row-col < my_haut(row) )                    return map_fast(col,row);                else                     return 0;            }    }      // ----------------------------------------------------------------------      //                                                           firstInRow()      // ----------------------------------------------------------------------    Index    SymmetricSkyline::firstInRow(Index const i) const    {        assert( MinIndex <= i && i <= my_n );        return i;    }                  // ----------------------------------------------------------------------      //                                                           lastInRow()      // ----------------------------------------------------------------------    Index    SymmetricSkyline::lastInRow(Index const i) const    {        Index k;        assert( MinIndex <= i && i <= my_n );                for( k=my_n ; i<k ; --k )            if(  map(i,k) != 0 )                return k;        return i;    }      // ----------------------------------------------------------------------      //                                                           firstInCol()      // ----------------------------------------------------------------------    Index    SymmetricSkyline::firstInCol( Index const j ) const    {        assert( MinIndex <= j && j <= my_n );        return j-my_haut(j)+1;    }                  // ----------------------------------------------------------------------      //                                                           lastInCol()      // ----------------------------------------------------------------------    Index    SymmetricSkyline::lastInCol( Index const j ) const    {        return j;    }                      // ----------------------------------------------------------------------      //                                                             map_fast()      // ----------------------------------------------------------------------    inline Index    SymmetricSkylineIterator::map_fast( Index const& row, Index const& col ) const    {        return my_diag(col)+col-row;    }        // ----------------------------------------------------------------------      //                                                                  map()      // ----------------------------------------------------------------------    Index    SymmetricSkylineIterator::map( Index const& row, Index const& col ) const    {        assert( MinIndex <= row && row <= my_n );        assert( MinIndex <= col && col <= my_n );              if( col >= row )            {                if( col-row < my_haut(col) )                    return map_fast(row,col);                else                     return 0;            }        else            {                if( row-col < my_haut(row) )                    return map_fast(col,row);                else                     return 0;            }    }      // ----------------------------------------------------------------------      //                                                           firstInRow()      // ----------------------------------------------------------------------    Index    SymmetricSkylineIterator::firstInRow() const    {        assert( MinIndex <= my_i && my_i <= my_n );        assert( MinIndex <= my_j && my_j <= my_p );        return my_i;    }                  // ----------------------------------------------------------------------      //                                                           lastInRow()      // ----------------------------------------------------------------------    Index    SymmetricSkylineIterator::lastInRow() const    {        Index k;        assert( MinIndex <= my_i && my_i <= my_n );        assert( MinIndex <= my_j && my_j <= my_p );                for( k=my_p ; my_i<k ; --k )            if(  map(my_i,k) != 0 )                return k;        return my_i;    }      // ----------------------------------------------------------------------      //                                                           firstInCol()      // ----------------------------------------------------------------------    Index    SymmetricSkylineIterator::firstInCol() const    {        assert( MinIndex <= my_i && my_i <= my_n );        assert( MinIndex <= my_j && my_j <= my_p );        return my_j-my_haut(my_j)+1;    }      // ----------------------------------------------------------------------      //                                                           lastInCol()      // ----------------------------------------------------------------------    Index    SymmetricSkylineIterator::lastInCol() const    {        return my_j;    }                  // ----------------------------------------------------------------------      //                                                               incRow()      // ----------------------------------------------------------------------    void    SymmetricSkylineIterator::incRow()    {        ++my_i;                if( my_i > my_n )            my_ok = false;        else            {                my_j = firstInRow();                my_o = map(my_i,my_j);            }            }      // ----------------------------------------------------------------------      //                                                               incCol()      // ----------------------------------------------------------------------    void    SymmetricSkylineIterator::incCol()     {        ++my_j;                if( my_j > my_p )            my_ok = false;        else            {                my_i = firstInCol();                my_o = map(my_i,my_j);            }    }      // ----------------------------------------------------------------------      //                                                           operator++()      // ----------------------------------------------------------------------    void    SymmetricSkylineIterator::operator++()    {          // cerr << "DBG: IN DIAG: "  << my_diag;          // cerr << "DBG: IN HAUT: "  << my_haut;          // cerr << "DBG: IN : "          //      << " i=" << my_i << " j=" << my_j << " o=" << my_o << endl;          // diagonal and upper part        if( my_i <= my_j )            {                  // cerr << "DBG: diag+upper part" << endl;                my_o++;                if( my_o > my_last )                    my_ok = false;                else                    {                          // must find the matching i and j                        if( my_diag(my_j+1) == my_o )                            {                                // cerr << "DBG: inc col" << endl;                                  // ok we have change line number thus                                ++my_j;                                my_i = my_j;                            } else {                                // cerr << "DBG: dec lin" << endl;                                --my_i;                            }                                            }            }                  // cerr << "DBG: OUT: "          //   << " i=" << my_i          //   << " j=" << my_j          //   << " o=" << my_o          //   << endl;    }            void SymmetricSkyline::compute_profil( VectorUInt const& haut )    {        Index i;        Index n;              assert( haut.rows() == my_haut.rows() );        assert( haut.cols() == my_haut.cols() );        assert( my_profil_is_set == false );                    my_profil_is_set = true;          // compute my_diag and my_haut        n = haut.rows();          // affect haut        for( i=1 ; i<=n ; ++i )            if( haut(i) == 0 )                my_haut(i) = 1;            else if( haut(i) > i )                my_haut(i)= i;            else                my_haut(i) = haut(i);        my_diag(1)=1;        for( i=2 ; i<=n ; ++i )            my_diag(i) = my_diag(i-1)+my_haut(i-1);        my_data_length = my_diag(n)+haut(n)-1;                };    void SymmetricSkyline::compute_profil( MatrixUInt const& noda,                                           MatrixUInt const& connex )    {          // A FAIRE    };        #ifdef HAVE_NAMESPACE}#endif#endif// end of SL_MATRIX_STRUCTURES_SSS_IMPLEMENTATION_H definition(s)// do not write anything after this line!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -