Modernize include/ceres headers to C++17 and Abseil conventions
- include/ceres/autodiff_manifold.h: Replace manual zero-initialization loops with value-initialization ({}) in PlusJacobian and MinusJacobian.
- include/ceres/dynamic_numeric_diff_cost_function.h: Replace std::vector with absl::FixedArray for temporary evaluation buffers and use std::copy_n instead of memcpy in Evaluate.
- include/ceres/numeric_diff_cost_function.h: Replace memcpy with std::copy_n in Evaluate.
Change-Id: I13b546458185d9fdd22b086094ca1072c57c40ed
diff --git a/include/ceres/autodiff_manifold.h b/include/ceres/autodiff_manifold.h
index c3169f7..9e04928 100644
--- a/include/ceres/autodiff_manifold.h
+++ b/include/ceres/autodiff_manifold.h
@@ -203,15 +203,8 @@
template <typename Functor, int kAmbientSize, int kTangentSize>
bool AutoDiffManifold<Functor, kAmbientSize, kTangentSize>::PlusJacobian(
const double* x, double* jacobian) const {
- double zero_delta[kTangentSize];
- for (int i = 0; i < kTangentSize; ++i) {
- zero_delta[i] = 0.0;
- }
-
- double x_plus_delta[kAmbientSize];
- for (int i = 0; i < kAmbientSize; ++i) {
- x_plus_delta[i] = 0.0;
- }
+ double zero_delta[kTangentSize] = {};
+ double x_plus_delta[kAmbientSize] = {};
const double* parameter_ptrs[2] = {x, zero_delta};
@@ -231,10 +224,7 @@
template <typename Functor, int kAmbientSize, int kTangentSize>
bool AutoDiffManifold<Functor, kAmbientSize, kTangentSize>::MinusJacobian(
const double* x, double* jacobian) const {
- double y_minus_x[kTangentSize];
- for (int i = 0; i < kTangentSize; ++i) {
- y_minus_x[i] = 0.0;
- }
+ double y_minus_x[kTangentSize] = {};
const double* parameter_ptrs[2] = {x, x};
diff --git a/include/ceres/dynamic_numeric_diff_cost_function.h b/include/ceres/dynamic_numeric_diff_cost_function.h
index 55b7913..a25bd8f 100644
--- a/include/ceres/dynamic_numeric_diff_cost_function.h
+++ b/include/ceres/dynamic_numeric_diff_cost_function.h
@@ -40,6 +40,7 @@
#include <type_traits>
#include <vector>
+#include "absl/container/fixed_array.h"
#include "absl/log/check.h"
#include "ceres/dynamic_cost_function.h"
#include "ceres/internal/eigen.h"
@@ -142,9 +143,10 @@
}
// Create local space for a copy of the parameters which will get mutated.
- int parameters_size = accumulate(block_sizes.begin(), block_sizes.end(), 0);
- std::vector<double> parameters_copy(parameters_size);
- std::vector<double*> parameters_references_copy(block_sizes.size());
+ int parameters_size =
+ std::accumulate(block_sizes.begin(), block_sizes.end(), 0);
+ absl::FixedArray<double> parameters_copy(parameters_size);
+ absl::FixedArray<double*> parameters_references_copy(block_sizes.size());
parameters_references_copy[0] = parameters_copy.data();
for (size_t block = 1; block < block_sizes.size(); ++block) {
parameters_references_copy[block] =
@@ -153,9 +155,9 @@
// Copy the parameters into the local temp space.
for (size_t block = 0; block < block_sizes.size(); ++block) {
- memcpy(parameters_references_copy[block],
- parameters[block],
- block_sizes[block] * sizeof(*parameters[block]));
+ std::copy_n(parameters[block],
+ block_sizes[block],
+ parameters_references_copy[block]);
}
for (size_t block = 0; block < block_sizes.size(); ++block) {
diff --git a/include/ceres/numeric_diff_cost_function.h b/include/ceres/numeric_diff_cost_function.h
index 89ddda7..5889b70 100644
--- a/include/ceres/numeric_diff_cost_function.h
+++ b/include/ceres/numeric_diff_cost_function.h
@@ -160,6 +160,7 @@
#ifndef CERES_PUBLIC_NUMERIC_DIFF_COST_FUNCTION_H_
#define CERES_PUBLIC_NUMERIC_DIFF_COST_FUNCTION_H_
+#include <algorithm>
#include <array>
#include <memory>
#include <type_traits>
@@ -261,9 +262,9 @@
ParameterDims::GetUnpackedParameters(parameters_copy.data());
for (int block = 0; block < kNumParameterBlocks; ++block) {
- memcpy(parameters_reference_copy[block],
- parameters[block],
- sizeof(double) * ParameterDims::GetDim(block));
+ std::copy_n(parameters[block],
+ ParameterDims::GetDim(block),
+ parameters_reference_copy[block]);
}
internal::EvaluateJacobianForParameterBlocks<kMethod,