Files
ceres-solver/internal/ceres/manifold_adapter.h
T
Sameer Agarwal caf614a6c1 Modernize code using c++17 constructs
Mostly done using

find . \( -name '*.cc' -o -name '*.h' \) -a -type f -exec clang-tidy -p \
cmake-build -checks='-*,google-*,modernize-*,-modernize-use-nodiscard,-modernize-use-trailing-return-type' {} -fix \;

Change-Id: Ifccbcabe7a1d9a32a09d28ac4f3f8466696c1a50
2022-04-22 06:11:18 -07:00

59 lines
1.8 KiB
C++

#include "ceres/internal/export.h"
#include "ceres/local_parameterization.h"
#include "ceres/manifold.h"
#include "glog/logging.h"
namespace ceres::internal {
// Adapter to wrap LocalParameterization and make them look like Manifolds.
//
// ManifoldAdapter NEVER takes ownership of local_parameterization.
class CERES_NO_EXPORT ManifoldAdapter final : public Manifold {
public:
explicit ManifoldAdapter(const LocalParameterization* local_parameterization)
: local_parameterization_(local_parameterization) {
CHECK(local_parameterization != nullptr);
}
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override {
return local_parameterization_->Plus(x, delta, x_plus_delta);
}
bool PlusJacobian(const double* x, double* jacobian) const override {
return local_parameterization_->ComputeJacobian(x, jacobian);
}
bool RightMultiplyByPlusJacobian(const double* x,
const int num_rows,
const double* ambient_matrix,
double* tangent_matrix) const override {
return local_parameterization_->MultiplyByJacobian(
x, num_rows, ambient_matrix, tangent_matrix);
}
bool Minus(const double* y, const double* x, double* delta) const override {
LOG(FATAL) << "This should never be called.";
return false;
}
bool MinusJacobian(const double* x, double* jacobian) const override {
LOG(FATAL) << "This should never be called.";
return false;
}
int AmbientSize() const override {
return local_parameterization_->GlobalSize();
}
int TangentSize() const override {
return local_parameterization_->LocalSize();
}
private:
const LocalParameterization* local_parameterization_;
};
} // namespace ceres::internal