Exemplo n.º 1
0
bool AVIIndex::makeIndex() {
	if (!allocateIndex(total_ents)) return false;

	put(indexPtr());

	return true;
}
//--------------------------------------------------------------------------------------------------------------
// build the index
void ImplAlignmentMatrixDiagonal::buildIndex() const
{
    Position i;

    mNumDiagonals = (mColTo - mColFrom) + (mRowTo - mRowFrom) + 1;
    Dot ndots = mPairs.size();

    //  allocate and initialize memory memory
    // add one extra element as a terminator
    // to simplify mapRowToCol
    allocateIndex( mNumDiagonals + 1);
    for (i = 0; i <= mNumDiagonals; i++) {
        mIndex[i] = NODOT;
    }

    Dot first_dot = 0;
    Diagonal diagonal = calculateNormalizedDiagonal( mPairs[0], mRowFrom, mColFrom);
    Diagonal min_diagonal = -(mRowTo - mRowFrom);

    // update mIndex
    for (i = 0; i < ndots; i++)
    {
        Diagonal next_diagonal = calculateNormalizedDiagonal(mPairs[i], mRowFrom, mColFrom);
        if(diagonal != next_diagonal)
        {
            mIndex[diagonal - min_diagonal] = first_dot;
            first_dot	= i;
            diagonal = next_diagonal;
        }
    }

    mIndex[diagonal - min_diagonal] = first_dot;

}