g2o
Loading...
Searching...
No Matches
csparse_wrapper.h
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above copyright
12// notice, this list of conditions and the following disclaimer in the
13// documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef G2O_CSPARSE_WRAPPER_H
28#define G2O_CSPARSE_WRAPPER_H
29
30#include <cstddef>
31#include <memory>
32
34
35namespace g2o {
36namespace csparse {
37
38class CSparse {
39 public:
40 CSparse();
42
44 struct SparseView {
45 int& m;
46 int& n;
47 int& nzmax;
48 int*& p;
49 int*& i;
50 double*& x;
52 SparseView(int& m, int& n, int& nzmax, int*& p, int*& i, double*& x,
54 : m(m),
55 n(n),
56 nzmax(nzmax),
57 p(p),
58 i(i),
59 x(x),
61 };
62
64 struct FactorView {
65 int& n;
66 int*& p;
67 int*& i;
68 double*& x;
69 int*& pinv;
70 FactorView(int& n, int*& p, int*& i, double*& x, int*& pinv)
71 : n(n), p(p), i(i), x(x), pinv(pinv) {}
72 };
73
74 bool factorize();
75 bool hasFactor() const;
76 void freeFactor();
77 FactorView factor();
78
80 bool amd(const SparseView& sparseView, VectorXI& result);
81
82 int choleskyNz() const;
83
84 bool solve(double* x, double* b) const;
85
86 bool analyze();
87 bool analyze_p(int* permutation);
88
89 bool hasSymbolic() const;
90 void freeSymbolic();
91
92 SparseView sparseView();
93 bool writeSparse(const std::string& filename) const;
94
95 private:
96 class Impl;
97 std::unique_ptr<Impl> pImpl;
98};
99
100} // namespace csparse
101} // namespace g2o
102#endif
bool amd(const SparseView &sparseView, VectorXI &result)
compute AMD ordering on the given SparseView, store into result
bool solve(double *x, double *b) const
std::unique_ptr< Impl > pImpl
bool analyze_p(int *permutation)
bool writeSparse(const std::string &filename) const
Eigen::Matrix< int, Eigen::Dynamic, 1, Eigen::ColMajor > VectorXI
Definition eigen_types.h:41
View onto the cholesky factor.
FactorView(int &n, int *&p, int *&i, double *&x, int *&pinv)
View onto the sparse matrix structure of CSparse using CCS storage.
SparseView(int &m, int &n, int &nzmax, int *&p, int *&i, double *&x, int &columnsAllocated)