Bug fixes in VerticalBlockMatrix
parent
6d7c9e95e4
commit
8c2b53ad3b
|
|
@ -24,7 +24,7 @@ namespace gtsam {
|
||||||
VerticalBlockMatrix VerticalBlockMatrix::LikeActiveViewOf(const VerticalBlockMatrix& rhs) {
|
VerticalBlockMatrix VerticalBlockMatrix::LikeActiveViewOf(const VerticalBlockMatrix& rhs) {
|
||||||
VerticalBlockMatrix result;
|
VerticalBlockMatrix result;
|
||||||
result.variableColOffsets_.resize(rhs.nBlocks() + 1);
|
result.variableColOffsets_.resize(rhs.nBlocks() + 1);
|
||||||
for(Index i = 0; i < rhs.nBlocks(); ++i)
|
for(Index i = 0; i < rhs.nBlocks() + 1; ++i)
|
||||||
result.variableColOffsets_[i] = rhs.variableColOffsets_[i + rhs.blockStart_];
|
result.variableColOffsets_[i] = rhs.variableColOffsets_[i + rhs.blockStart_];
|
||||||
result.matrix_.resize(rhs.rows(), result.variableColOffsets_.back());
|
result.matrix_.resize(rhs.rows(), result.variableColOffsets_.back());
|
||||||
result.rowEnd_ = rhs.rows();
|
result.rowEnd_ = rhs.rows();
|
||||||
|
|
|
||||||
|
|
@ -71,10 +71,10 @@ namespace gtsam {
|
||||||
* height is matrixNewHeight and its width fits the given block dimensions. */
|
* height is matrixNewHeight and its width fits the given block dimensions. */
|
||||||
template<typename CONTAINER>
|
template<typename CONTAINER>
|
||||||
VerticalBlockMatrix(const CONTAINER dimensions, DenseIndex height) :
|
VerticalBlockMatrix(const CONTAINER dimensions, DenseIndex height) :
|
||||||
matrix_(height, variableColOffsets_.back()),
|
|
||||||
rowStart_(0), rowEnd_(height), blockStart_(0)
|
rowStart_(0), rowEnd_(height), blockStart_(0)
|
||||||
{
|
{
|
||||||
fillOffsets(dimensions.begin(), dimensions.end());
|
fillOffsets(dimensions.begin(), dimensions.end());
|
||||||
|
matrix_.resize(height, variableColOffsets_.back());
|
||||||
assertInvariants();
|
assertInvariants();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,10 +83,10 @@ namespace gtsam {
|
||||||
* height is matrixNewHeight and its width fits the given block dimensions. */
|
* height is matrixNewHeight and its width fits the given block dimensions. */
|
||||||
template<typename ITERATOR>
|
template<typename ITERATOR>
|
||||||
VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex height) :
|
VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex height) :
|
||||||
matrix_(height, variableColOffsets_.back()),
|
|
||||||
rowStart_(0), rowEnd_(height), blockStart_(0)
|
rowStart_(0), rowEnd_(height), blockStart_(0)
|
||||||
{
|
{
|
||||||
fillOffsets(firstBlockDim, lastBlockDim);
|
fillOffsets(firstBlockDim, lastBlockDim);
|
||||||
|
matrix_.resize(height, variableColOffsets_.back());
|
||||||
assertInvariants();
|
assertInvariants();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ namespace gtsam {
|
||||||
Index actualEndBlock = endBlock + blockStart_;
|
Index actualEndBlock = endBlock + blockStart_;
|
||||||
if(startBlock != 0 || endBlock != 0) {
|
if(startBlock != 0 || endBlock != 0) {
|
||||||
checkBlock(actualStartBlock);
|
checkBlock(actualStartBlock);
|
||||||
checkBlock(actualEndBlock);
|
assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
|
||||||
}
|
}
|
||||||
const Index startCol = variableColOffsets_[actualStartBlock];
|
const Index startCol = variableColOffsets_[actualStartBlock];
|
||||||
const Index rangeCols = variableColOffsets_[actualEndBlock] - startCol;
|
const Index rangeCols = variableColOffsets_[actualEndBlock] - startCol;
|
||||||
|
|
@ -125,7 +125,7 @@ namespace gtsam {
|
||||||
Index actualEndBlock = endBlock + blockStart_;
|
Index actualEndBlock = endBlock + blockStart_;
|
||||||
if(startBlock != 0 || endBlock != 0) {
|
if(startBlock != 0 || endBlock != 0) {
|
||||||
checkBlock(actualStartBlock);
|
checkBlock(actualStartBlock);
|
||||||
checkBlock(actualEndBlock);
|
assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
|
||||||
}
|
}
|
||||||
const Index startCol = variableColOffsets_[actualStartBlock];
|
const Index startCol = variableColOffsets_[actualStartBlock];
|
||||||
const Index rangeCols = variableColOffsets_[actualEndBlock] - startCol;
|
const Index rangeCols = variableColOffsets_[actualEndBlock] - startCol;
|
||||||
|
|
@ -190,7 +190,7 @@ namespace gtsam {
|
||||||
|
|
||||||
void checkBlock(DenseIndex block) const {
|
void checkBlock(DenseIndex block) const {
|
||||||
assert(matrix_.cols() == variableColOffsets_.back());
|
assert(matrix_.cols() == variableColOffsets_.back());
|
||||||
assert(block < (DenseIndex)variableColOffsets_.size()-1);
|
assert(block < (DenseIndex)variableColOffsets_.size() - 1);
|
||||||
assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_[block+1] <= matrix_.cols());
|
assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_[block+1] <= matrix_.cols());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue