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); }
Matrix<T>::GetImagPart( Int i, Int j ) const { #ifndef RELEASE CallStackEntry entry("Matrix::GetImagPart"); AssertValidEntry( i, j ); #endif return elem::ImagPart( Get_( i, j ) ); }
T Matrix<T>::Get( Int i, Int j ) const { #ifndef RELEASE CallStackEntry entry("Matrix::Get"); AssertValidEntry( i, j ); #endif return Get_( i, j ); }
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; }
void *RBTreeGet(const RBTree *tree, const void *key) { RBNode *node = Get_(tree, key); return node != tree->nil ? node->value : NULL; }