Skip to content

Commit 96d7ffa

Browse files
committed
proper indexing (int, Eigen:Index)
1 parent 4792328 commit 96d7ffa

File tree

9 files changed

+70
-58
lines changed

9 files changed

+70
-58
lines changed

src/adjustment.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <QStringLiteral>
2626

2727
#include "qassert.h"
28+
#include "qcontainerfwd.h"
2829
#include "qlogging.h"
2930
#include "qtdeprecationdefinitions.h"
3031

@@ -47,21 +48,21 @@ using Eigen::MatrixXd;
4748
using Eigen::SparseMatrix;
4849

4950

50-
Index AdjustmentFramework::indexOf(const Eigen::VectorXi &v, const int x)
51+
Index AdjustmentFramework::indexOf(const Eigen::VectorXi &v, const Index i)
5152
{
5253
for ( Index j=0; j<v.size(); j++) {
53-
if ( v(j)==x ) {
54+
if ( v(j)==i ) {
5455
return j;
5556
}
5657
}
5758
return -1;
5859

5960
/* Eigen 3.4.0
60-
auto it = std::find( v.begin(), v.end(), x);
61+
auto it = std::find( v.begin(), v.end(), i);
6162
if ( it==v.end() ) {
6263
return -1;
6364
}
64-
return std::distance( v.begin(), it);*/
65+
return std::distance( v.begin(), it); */
6566
}
6667

6768
MatrixXd AdjustmentFramework::Rot_ab(const VectorXd &a, const VectorXd &b)
@@ -397,7 +398,7 @@ void AdjustmentFramework::check_constraints(
397398

398399
auto idxx = bi->findInColumn( mapc(c) );
399400
for ( Index i=0; i<idxx.size(); i++ ) {
400-
int const idxxx = indexOf(maps, idxx(i));
401+
const Index idxxx = indexOf(maps, idxx(i));
401402
deb << idxxx+1;
402403
}
403404
}

src/adjustment.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class AdjustmentFramework
111111
//! Nullspace of row vector
112112
static Eigen::MatrixXd null(const Eigen::VectorXd &xs);
113113

114-
static Eigen::Index indexOf(const Eigen::VectorXi &v, int x);
114+
static Eigen::Index indexOf(const Eigen::VectorXi &v, Eigen::Index i);
115115
};
116116

117117
#endif // ADJUSTMENT_H

src/constraints.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ std::shared_ptr<ConstraintBase> ConstraintBase::clone() const
100100

101101

102102

103-
MatrixXd Orthogonal::Jacobian( const VectorXi & idxx,
103+
MatrixXd Orthogonal::Jacobian( const VectorXidx & idxx,
104104
const VectorXd &l0,
105105
const VectorXd &l) const
106106
{
@@ -121,7 +121,7 @@ MatrixXd Orthogonal::Jacobian( const VectorXi & idxx,
121121
return Tmp;
122122
}
123123

124-
VectorXd Orthogonal::contradict( const VectorXi &idx,
124+
VectorXd Orthogonal::contradict( const VectorXidx &idx,
125125
const VectorXd &l0) const
126126
{
127127
Vector3d const a = l0.segment(3 * idx(0), 3);
@@ -150,7 +150,7 @@ std::shared_ptr<ConstraintBase> Orthogonal::doClone() const
150150
return T;
151151
}
152152

153-
MatrixXd Copunctual::Jacobian(const VectorXi &idx, const VectorXd &l0, const VectorXd &l) const
153+
MatrixXd Copunctual::Jacobian(const VectorXidx &idx, const VectorXd &l0, const VectorXd &l) const
154154
{
155155
Vector3d const a0 = l0.segment(3 * idx(0), 3);
156156
Vector3d const b0 = l0.segment(3 * idx(1), 3);
@@ -171,7 +171,7 @@ MatrixXd Copunctual::Jacobian(const VectorXi &idx, const VectorXd &l0, const Vec
171171
return Tmp;
172172
}
173173

174-
VectorXd Copunctual::contradict(const VectorXi &idx, const VectorXd &l0) const
174+
VectorXd Copunctual::contradict(const VectorXidx &idx, const VectorXd &l0) const
175175
{
176176
Vector3d const a = l0.segment(3 * idx(0), 3);
177177
Vector3d const b = l0.segment(3 * idx(1), 3);
@@ -212,7 +212,7 @@ std::shared_ptr<ConstraintBase> Copunctual::doClone() const
212212
return T;
213213
}
214214

215-
MatrixXd Identical::Jacobian( const VectorXi & idx,
215+
MatrixXd Identical::Jacobian( const VectorXidx & idx,
216216
const VectorXd & l0,
217217
const VectorXd & l) const
218218
{
@@ -245,7 +245,7 @@ MatrixXd Identical::Jacobian( const VectorXi & idx,
245245
return Tmp;
246246
}
247247

248-
VectorXd Identical::contradict( const VectorXi & idx,
248+
VectorXd Identical::contradict( const VectorXidx & idx,
249249
const VectorXd & l0) const
250250
{
251251
Vector3d a0 = l0.segment( 3*idx(0),3 );
@@ -275,7 +275,7 @@ std::shared_ptr<ConstraintBase> Identical::doClone() const
275275
return T;
276276
}
277277

278-
MatrixXd Parallel::Jacobian(const VectorXi &idx, const VectorXd &l0, const VectorXd &l) const
278+
MatrixXd Parallel::Jacobian(const VectorXidx &idx, const VectorXd &l0, const VectorXd &l) const
279279
{
280280
Vector3d const a0 = l0.segment(3 * idx(0), 3);
281281
Vector3d const b0 = l0.segment(3 * idx(1), 3);
@@ -294,7 +294,7 @@ MatrixXd Parallel::Jacobian(const VectorXi &idx, const VectorXd &l0, const Vecto
294294
return Tmp;
295295
}
296296

297-
VectorXd Parallel::contradict(const VectorXi &idx, const VectorXd &l0) const
297+
VectorXd Parallel::contradict(const VectorXidx &idx, const VectorXd &l0) const
298298
{
299299
Vector3d const a = l0.segment(3 * idx(0), 3);
300300
Vector3d const b = l0.segment( 3*idx(1),3 );
@@ -341,7 +341,7 @@ Vector3d Vertical::e2()
341341
return tmp;
342342
}
343343

344-
MatrixXd Vertical::Jacobian(const VectorXi &idx, const VectorXd &l0, const VectorXd &l) const
344+
MatrixXd Vertical::Jacobian(const VectorXidx &idx, const VectorXd &l0, const VectorXd &l) const
345345
{
346346
Vector3d const a0 = l0.segment(3 * idx(0), 3);
347347
Vector3d const a = l.segment( 3*idx(0), 3);
@@ -351,15 +351,15 @@ MatrixXd Vertical::Jacobian(const VectorXi &idx, const VectorXd &l0, const Vecto
351351
return e2().adjoint()* Rot_ab(a0,a)*null(a0);
352352
}
353353

354-
VectorXd Vertical::contradict( const VectorXi &idx,
354+
VectorXd Vertical::contradict( const VectorXidx &idx,
355355
const VectorXd &l0) const
356356
{
357357
VectorXd tmp(1);
358358
tmp << l0.segment( 3*idx(0)+1, 1); // 2nd element
359359
return tmp;
360360
}
361361

362-
VectorXd Diagonal::contradict( const VectorXi &idx,
362+
VectorXd Diagonal::contradict( const VectorXidx &idx,
363363
const VectorXd &l0) const
364364
{
365365
Vector3d l = l0.segment( 3*idx(0), 3);
@@ -378,7 +378,7 @@ std::shared_ptr<ConstraintBase> Diagonal::doClone() const
378378
}
379379

380380

381-
MatrixXd Diagonal::Jacobian( const VectorXi &idx,
381+
MatrixXd Diagonal::Jacobian( const VectorXidx &idx,
382382
const VectorXd &l0,
383383
const VectorXd &l) const
384384
{
@@ -398,7 +398,7 @@ std::shared_ptr<ConstraintBase> Horizontal::doClone() const
398398
return T;
399399
}
400400

401-
VectorXd Horizontal::contradict( const VectorXi &idx,
401+
VectorXd Horizontal::contradict( const VectorXidx &idx,
402402
const VectorXd &l0) const
403403
{
404404
VectorXd tmp(1); // scalar as vector
@@ -414,7 +414,7 @@ Vector3d Horizontal::e1()
414414
return tmp;
415415
}
416416

417-
MatrixXd Horizontal::Jacobian( const VectorXi &idx,
417+
MatrixXd Horizontal::Jacobian( const VectorXidx &idx,
418418
const VectorXd &l0,
419419
const VectorXd &l) const
420420
{

src/constraints.h

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include <Eigen/Core>
2525
#include <memory>
2626

27+
#include "matrix.h"
28+
2729
//! Geometric constraints (relations)
2830
namespace Constraint {
2931

@@ -32,6 +34,7 @@ using Eigen::MatrixXd;
3234
using Eigen::Vector3d;
3335
using Eigen::VectorXd;
3436
using Eigen::VectorXi;
37+
using Eigen::VectorXidx;
3538

3639
//! Base class for constraints
3740
class ConstraintBase
@@ -70,10 +73,10 @@ class ConstraintBase
7073
void setEnforced( const bool b) { m_enforced = b; } //!< Set status success of enforcement
7174

7275
//! Compute Jacobian w.r.t. observations
73-
[[nodiscard]] virtual MatrixXd Jacobian( const VectorXi &idxx,
76+
[[nodiscard]] virtual MatrixXd Jacobian( const Eigen::VectorXidx &idxx,
7477
const VectorXd &l0, const VectorXd &l) const = 0;
7578
//! Compute contradictions with adjusted observations
76-
[[nodiscard]] virtual VectorXd contradict( const VectorXi &idxx,
79+
[[nodiscard]] virtual VectorXd contradict( const VectorXidx &idxx,
7780
const VectorXd &l0 ) const = 0;
7881

7982
//! Check if constraint is of a certain, specified type
@@ -99,8 +102,8 @@ class ConstraintBase
99102
class Copunctual : public ConstraintBase
100103
{
101104
public:
102-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
103-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
105+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
106+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
104107
[[nodiscard]] int dof() const override {return s_dof;}
105108
[[nodiscard]] int arity() const override {return s_arity;} //!< number of involved entities
106109

@@ -123,8 +126,8 @@ class Copunctual : public ConstraintBase
123126
class Parallel : public ConstraintBase
124127
{
125128
public:
126-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
127-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
129+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
130+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
128131
[[nodiscard]] int dof() const override { return s_dof; }
129132
[[nodiscard]] int arity() const override { return s_arity; }
130133

@@ -146,8 +149,8 @@ class Parallel : public ConstraintBase
146149
class Vertical : public ConstraintBase
147150
{
148151
public:
149-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
150-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
152+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
153+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
151154
[[nodiscard]] int dof() const override { return s_dof; }
152155
[[nodiscard]] int arity() const override { return s_arity; }
153156

@@ -170,8 +173,8 @@ class Vertical : public ConstraintBase
170173
class Horizontal : public ConstraintBase
171174
{
172175
public:
173-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
174-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
176+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
177+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
175178
[[nodiscard]] int dof() const override { return s_dof; }
176179
[[nodiscard]] int arity() const override { return s_arity; }
177180

@@ -194,8 +197,8 @@ class Horizontal : public ConstraintBase
194197
class Diagonal : public ConstraintBase
195198
{
196199
public:
197-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
198-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
200+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
201+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
199202
[[nodiscard]] int dof() const override { return s_dof; }
200203
[[nodiscard]] int arity() const override { return s_arity; }
201204

@@ -216,8 +219,8 @@ class Diagonal : public ConstraintBase
216219
class Orthogonal : public ConstraintBase
217220
{
218221
public:
219-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
220-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
222+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
223+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
221224
[[nodiscard]] int dof() const override { return s_dof; }
222225
[[nodiscard]] int arity() const override { return s_arity; }
223226

@@ -239,8 +242,8 @@ class Orthogonal : public ConstraintBase
239242
class Identical : public ConstraintBase
240243
{
241244
public:
242-
[[nodiscard]] MatrixXd Jacobian( const VectorXi &idxx, const VectorXd &l0, const VectorXd &l) const override;
243-
[[nodiscard]] VectorXd contradict( const VectorXi &idxx, const VectorXd &l0) const override;
245+
[[nodiscard]] MatrixXd Jacobian( const VectorXidx &idxx, const VectorXd &l0, const VectorXd &l) const override;
246+
[[nodiscard]] VectorXd contradict( const VectorXidx &idxx, const VectorXd &l0) const override;
244247
[[nodiscard]] int dof() const override {return s_dof;}
245248
[[nodiscard]] int arity() const override {return s_arity;}
246249

src/matrix.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace Graph {
3131

3232
using Eigen::Triplet;
3333
using Eigen::Index;
34+
using Eigen::VectorXidx;
3435

3536

3637

@@ -66,11 +67,11 @@ SparseMatrix<int> IncidenceMatrix::biadjacency() const {
6667
}
6768

6869

69-
VectorXi IncidenceMatrix::findInColumn( const Index c ) const
70+
VectorXidx IncidenceMatrix::findInColumn( const Index c ) const
7071
{
7172
Eigen::Index const nnz = innerVector(c).nonZeros();
7273

73-
VectorXi idx( nnz );
74+
VectorXidx idx( nnz );
7475
int i=0;
7576
for ( SparseMatrix<int>::InnerIterator it(*this,c); it; ++it) {
7677
idx(i++) = it.index();

src/matrix.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@
2323
#include <Eigen/Dense>
2424
#include <Eigen/SparseCore>
2525

26+
namespace Eigen {
27+
using VectorXidx = Matrix<Index,Dynamic,1>;
28+
} // namespace Eigen
29+
2630
namespace Graph {
2731

2832
using Eigen::ColMajor;
2933
using Eigen::SparseMatrix;
3034
using Eigen::VectorXi;
3135

36+
3237
//! Sparse incidence matrix to encode relationships
3338
class IncidenceMatrix : public SparseMatrix<int, ColMajor, int>
3439
{
@@ -41,7 +46,7 @@ class IncidenceMatrix : public SparseMatrix<int, ColMajor, int>
4146
return *this;
4247
}
4348

44-
[[nodiscard]] VectorXi findInColumn( Index c ) const; //!< Matlab: find(A(:,c))
49+
[[nodiscard]] Eigen::VectorXidx findInColumn( Index c ) const; //!< Matlab: find(A(:,c))
4550
[[nodiscard]] bool isSet( Index r, Index c) const; //!< Check if r and c are related
4651
[[nodiscard]] SparseMatrix<int> biadjacency() const; //!< Create biadjacency matrix [O, A; A', O]
4752

src/qconstraints.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ std::shared_ptr<QConstraintBase> QAligned::doClone() const
262262

263263

264264
void QAligned::setGeometry( QVector<std::shared_ptr<const uStraightLineSegment>> &s,
265-
const Eigen::VectorXi &idx)
265+
const Eigen::VectorXidx &idx)
266266
{
267267
assert( idx.size()==1 );
268268
int const i = idx(0);
@@ -341,7 +341,7 @@ qreal QOrthogonal::markerSize() const
341341

342342

343343
void QOrthogonal::setGeometry( QVector<std::shared_ptr<const uStraightLineSegment>> &s,
344-
const Eigen::VectorXi &idx)
344+
const Eigen::VectorXidx &idx)
345345
{
346346
// qDebug() << Q_FUNC_INFO;
347347
assert( idx.size()==2 );
@@ -403,7 +403,7 @@ std::shared_ptr<QConstraintBase> QCopunctual::create()
403403
}
404404

405405
void QCopunctual::setGeometry( QVector<std::shared_ptr<const uStraightLineSegment>> &s,
406-
const Eigen::VectorXi &idx)
406+
const Eigen::VectorXidx &idx)
407407
{
408408
assert( idx.size()==3 );
409409
int const i = idx(0);
@@ -501,7 +501,7 @@ qreal QParallel::markerSize() const
501501

502502

503503
void QParallel::setGeometry( QVector<std::shared_ptr<const uStraightLineSegment>> &s,
504-
const Eigen::VectorXi &idx)
504+
const Eigen::VectorXidx &idx)
505505
{
506506
assert( idx.size()==2 );
507507
int const i = idx(0);
@@ -584,7 +584,7 @@ qreal QIdentical::markerSize() const
584584

585585

586586
void QIdentical::setGeometry( QVector<std::shared_ptr<const uStraightLineSegment>> &s,
587-
const Eigen::VectorXi &idx)
587+
const Eigen::VectorXidx &idx)
588588
{
589589
assert( idx.size()==2 );
590590
int const i = idx(0);

0 commit comments

Comments
 (0)