Example #1
0
void
Matrix<T>::GetDiagonal( Matrix<T>& d, Int offset ) const
{ 
#ifndef RELEASE
    CallStackEntry entry("Matrix::GetDiagonal");
    if( d.Locked() )
        LogicError("d must not be a locked view");
#endif
    const Int diagLength = DiagonalLength(offset);
    d.ResizeTo( diagLength, 1 );
    if( offset >= 0 )
        for( Int j=0; j<diagLength; ++j )
            d.Set_( j, 0 ) = Get_(j,j+offset);
    else
        for( Int j=0; j<diagLength; ++j )
            d.Set_( j, 0 ) = Get_(j-offset,j);
}
Example #2
0
Matrix<T>::GetImagPart( Int i, Int j ) const
{
#ifndef RELEASE
    CallStackEntry entry("Matrix::GetImagPart");
    AssertValidEntry( i, j );
#endif
    return elem::ImagPart( Get_( i, j ) );
}
Example #3
0
T
Matrix<T>::Get( Int i, Int j ) const
{
#ifndef RELEASE
    CallStackEntry entry("Matrix::Get");
    AssertValidEntry( i, j );
#endif
    return Get_( i, j );
}
Example #4
0
bool RBTreeRemove(RBTree *tree, const void *key)
{
    assert(!tree->nil->red);

    RBNode *z = Get_(tree, key);
    if (z == tree->nil)
    {
        return false;
    }

    RBNode *y = ((z->left == tree->nil) || (z->right == tree->nil)) ? z : Next_(tree, z);
    RBNode *x = (y->left == tree->nil) ? y->right : y->left;

    x->parent = y->parent;
    if (tree->root == x->parent)
    {
        tree->root->left = x;
    }
    else
    {
        if (y == y->parent->left)
        {
            y->parent->left = x;
        }
        else
        {
            y->parent->right = x;
        }
    }

    if (z != y)
    {
        assert(y != tree->nil);
        assert(!tree->nil->red);

        if (!y->red)
        {
            RemoveFix_(tree, x);
        }

        y->left = z->left;
        y->right = z->right;
        y->parent = z->parent;
        y->red = z->red;
        z->left->parent = y;
        z->right->parent = y;

        if (z == z->parent->left)
        {
            z->parent->left = y;
        }
        else
        {
            z->parent->right = y;
        }
        NodeDestroy_(tree, z);
    }
    else
    {
        if (!y->red)
        {
            RemoveFix_(tree, x);
        }
        NodeDestroy_(tree, y);
    }

    assert(!tree->nil->red);

    tree->size--;
    return true;
}
Example #5
0
void *RBTreeGet(const RBTree *tree, const void *key)
{
    RBNode *node = Get_(tree, key);
    return node != tree->nil ? node->value : NULL;
}