)]}'
{
  "commit": "84e1696f4ec3f17a1a1abca8277a5567d19ee71d",
  "tree": "45d91fe6c69cbfd49881b74e4c25e87c284997c5",
  "parents": [
    "518970f81ea16f05fb59eec5240f092cd1675bc6"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Thu Feb 17 17:06:49 2022 -0800"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Fri Feb 18 18:07:06 2022 +0000"
  },
  "message": "Add final specifier to internal classes.\n\nThis should help the compiler devirtualize a bunch of function\ncalls.\n\nhttps://github.com/ceres-solver/ceres-solver/issues/747\n\nChange-Id: I9913e68d85e0e9c9f955a249cc710a657875c869\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7d52294095907c756f0f5c8eb6630bf585db69b8",
      "old_mode": 33188,
      "old_path": "internal/ceres/accelerate_sparse.h",
      "new_id": "29d78e8c261c69c27a59040747cdc3844c2e8ad1",
      "new_mode": 33188,
      "new_path": "internal/ceres/accelerate_sparse.h"
    },
    {
      "type": "modify",
      "old_id": "df8382d3f2dbec5b638346452a6ed301c31b0d03",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_sparse_matrix.h",
      "new_id": "8e555b055430f8a7ad141f247772e24cb935c68c",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "9a0fd9c4abfdfa61029bcd77cee49ab5eec76901",
      "old_mode": 33188,
      "old_path": "internal/ceres/c_api.cc",
      "new_id": "784504fc108dc02086b577e8e7e44eed360ea184",
      "new_mode": 33188,
      "new_path": "internal/ceres/c_api.cc"
    },
    {
      "type": "modify",
      "old_id": "883de059ba677738789d4820113ee8240695b4bf",
      "old_mode": 33188,
      "old_path": "internal/ceres/callbacks.h",
      "new_id": "3b1d10cfa7f5d70389c48eb26850e623b6a2c2a6",
      "new_mode": 33188,
      "new_path": "internal/ceres/callbacks.h"
    },
    {
      "type": "modify",
      "old_id": "f4e8b7ebf58636a1fd353e9619c5ed2b53d4c87a",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_linear_operator.h",
      "new_id": "d708efca24c86bac131d8d507ad990d56ae0e676",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_linear_operator.h"
    },
    {
      "type": "modify",
      "old_id": "e7c2f742680cc3c04d8a460b6e71801ee42f61a9",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.h",
      "new_id": "06a611808adf58e0abb7910a10c980b55a1bdfb6",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.h"
    },
    {
      "type": "modify",
      "old_id": "eb954e6c6dcaa18685f72cb363ae8b383ed2dfd2",
      "old_mode": 33188,
      "old_path": "internal/ceres/conjugate_gradients_solver.h",
      "new_id": "418508a0fcd0f2814842d4be93ed214f9683f14b",
      "new_mode": 33188,
      "new_path": "internal/ceres/conjugate_gradients_solver.h"
    },
    {
      "type": "modify",
      "old_id": "19445490a8f04a93a7fc3d4dd51ab3d5eba615a6",
      "old_mode": 33188,
      "old_path": "internal/ceres/context_impl.h",
      "new_id": "7c49ba6d23650b536819e6f4cd5726a986076468",
      "new_mode": 33188,
      "new_path": "internal/ceres/context_impl.h"
    },
    {
      "type": "modify",
      "old_id": "d781491bb8a65263b475db14b0ce42235cb6cd03",
      "old_mode": 33188,
      "old_path": "internal/ceres/coordinate_descent_minimizer.h",
      "new_id": "75f26480c8857686e4ba467c8598a5c17e8e498b",
      "new_mode": 33188,
      "new_path": "internal/ceres/coordinate_descent_minimizer.h"
    },
    {
      "type": "modify",
      "old_id": "8968bba4f6a2cd6fb93d8f7870ca1f5539def5ad",
      "old_mode": 33188,
      "old_path": "internal/ceres/cxsparse.h",
      "new_id": "74135f9cb9c34ae4d1eee1c5f5632cc7588649dd",
      "new_mode": 33188,
      "new_path": "internal/ceres/cxsparse.h"
    },
    {
      "type": "modify",
      "old_id": "b40e69a97672d3b7f047ec6b3e335ca8eb1ecbac",
      "old_mode": 33188,
      "old_path": "internal/ceres/dense_cholesky.h",
      "new_id": "d056d8587ebf2eff17252c171501eae47aaacedd",
      "new_mode": 33188,
      "new_path": "internal/ceres/dense_cholesky.h"
    },
    {
      "type": "modify",
      "old_id": "d42cf8c3d22ec6c83adbdcf03174d0ebef451509",
      "old_mode": 33188,
      "old_path": "internal/ceres/dense_qr.h",
      "new_id": "1a3bc817fcf2e9865138d00965fd6ccfa44421fe",
      "new_mode": 33188,
      "new_path": "internal/ceres/dense_qr.h"
    },
    {
      "type": "modify",
      "old_id": "0dd91c17b5210252a06f7c9da41d5a47080257b3",
      "old_mode": 33188,
      "old_path": "internal/ceres/dense_qr_solver.h",
      "new_id": "39922a2692b4388591bfab9a8466ae5189808863",
      "new_mode": 33188,
      "new_path": "internal/ceres/dense_qr_solver.h"
    },
    {
      "type": "modify",
      "old_id": "606c38c66da2dad1f7cf602ebb7b1cefb0502b82",
      "old_mode": 33188,
      "old_path": "internal/ceres/dense_sparse_matrix.h",
      "new_id": "9f0835b73a7cded77b696bf00439cba265b5d5ce",
      "new_mode": 33188,
      "new_path": "internal/ceres/dense_sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "2d04a4932586b044fb3efef9ce6bee0a25003469",
      "old_mode": 33188,
      "old_path": "internal/ceres/dogleg_strategy.h",
      "new_id": "17f0cc743bc9fe19300b7a3e6ef1173405d12124",
      "new_mode": 33188,
      "new_path": "internal/ceres/dogleg_strategy.h"
    },
    {
      "type": "modify",
      "old_id": "11f78c7b9154d2bf116fea2bfd0e7ce73e4923d2",
      "old_mode": 33188,
      "old_path": "internal/ceres/dynamic_compressed_row_sparse_matrix.h",
      "new_id": "5b4c402f830efc8c0413d91278cdd4908e448d99",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "7211450931838d7db3e814aebcd91958a98b704a",
      "old_mode": 33188,
      "old_path": "internal/ceres/eigensparse.cc",
      "new_id": "38055dcd99ce360e8bc6ba40526019ab75801dcf",
      "new_mode": 33188,
      "new_path": "internal/ceres/eigensparse.cc"
    },
    {
      "type": "modify",
      "old_id": "e322b7cf935542b27dbac5124a5fc55f48da5da0",
      "old_mode": 33188,
      "old_path": "internal/ceres/gradient_checking_cost_function.cc",
      "new_id": "3251806d69db86249512458ca1decd88f29dfaf7",
      "new_mode": 33188,
      "new_path": "internal/ceres/gradient_checking_cost_function.cc"
    },
    {
      "type": "modify",
      "old_id": "70b794f5588640cdaa1e60973015a302c85051a3",
      "old_mode": 33188,
      "old_path": "internal/ceres/gradient_problem_evaluator.h",
      "new_id": "efbb257ec75885c1cfc19dfddccfdfea890ae6f5",
      "new_mode": 33188,
      "new_path": "internal/ceres/gradient_problem_evaluator.h"
    },
    {
      "type": "modify",
      "old_id": "83e15fe2b5843985f72db15c2aef5246d04b68ec",
      "old_mode": 33188,
      "old_path": "internal/ceres/implicit_schur_complement.h",
      "new_id": "598d48411aa6bc4354ae4179577fa6bc77b85b0e",
      "new_mode": 33188,
      "new_path": "internal/ceres/implicit_schur_complement.h"
    },
    {
      "type": "modify",
      "old_id": "674a4ff5eafb7dd7eacd6443f3e2df269ef47338",
      "old_mode": 33188,
      "old_path": "internal/ceres/iterative_schur_complement_solver.h",
      "new_id": "0794f361dffe88d570a57c393a4d5fe85fa2395b",
      "new_mode": 33188,
      "new_path": "internal/ceres/iterative_schur_complement_solver.h"
    },
    {
      "type": "modify",
      "old_id": "b75c2751531541ee9cfb79155331a586d5ebba4e",
      "old_mode": 33188,
      "old_path": "internal/ceres/levenberg_marquardt_strategy.h",
      "new_id": "4383a493cde2662624f2f2fc61d32210f12c50b5",
      "new_mode": 33188,
      "new_path": "internal/ceres/levenberg_marquardt_strategy.h"
    },
    {
      "type": "modify",
      "old_id": "b194fee34ac658d968122a523693861e09251905",
      "old_mode": 33188,
      "old_path": "internal/ceres/line_search.h",
      "new_id": "c2c744afe00e3f82f68d53818ec60a1f4736328d",
      "new_mode": 33188,
      "new_path": "internal/ceres/line_search.h"
    },
    {
      "type": "modify",
      "old_id": "90ae1494706efdd0d5b6809625456985aa71d682",
      "old_mode": 33188,
      "old_path": "internal/ceres/line_search_direction.cc",
      "new_id": "98e335a80295813b73cb35d09385a1c986c8cb02",
      "new_mode": 33188,
      "new_path": "internal/ceres/line_search_direction.cc"
    },
    {
      "type": "modify",
      "old_id": "c5cc9ddb65ba4195f6eb01554e230aa069bbebf5",
      "old_mode": 33188,
      "old_path": "internal/ceres/line_search_minimizer.h",
      "new_id": "9a0e994dcfc330283803a0045a923e84237dfa8f",
      "new_mode": 33188,
      "new_path": "internal/ceres/line_search_minimizer.h"
    },
    {
      "type": "modify",
      "old_id": "4cb7d689088f9eb1632f38f8e749c284eb054533",
      "old_mode": 33188,
      "old_path": "internal/ceres/line_search_preprocessor.h",
      "new_id": "27e9c2db9b9a3b2ea5b9310ac94979dcb639fc09",
      "new_mode": 33188,
      "new_path": "internal/ceres/line_search_preprocessor.h"
    },
    {
      "type": "modify",
      "old_id": "9a749729656b5985a8a675571a0ef8972db5b99d",
      "old_mode": 33188,
      "old_path": "internal/ceres/low_rank_inverse_hessian.h",
      "new_id": "36519360262de4570bd2280fc7e56b65a30cae94",
      "new_mode": 33188,
      "new_path": "internal/ceres/low_rank_inverse_hessian.h"
    },
    {
      "type": "modify",
      "old_id": "c61234974a3e9276ea4507213adbec4948cf64dd",
      "old_mode": 33188,
      "old_path": "internal/ceres/manifold_adapter.h",
      "new_id": "552e650d8406b3b5b93eebf06f8c8f97916cf3e3",
      "new_mode": 33188,
      "new_path": "internal/ceres/manifold_adapter.h"
    },
    {
      "type": "modify",
      "old_id": "dc2ef18973458729aba95c3d462cec5a1279a588",
      "old_mode": 33188,
      "old_path": "internal/ceres/partitioned_matrix_view.h",
      "new_id": "9eaec6f911e1e830d9f5c31673b0472365c1d85d",
      "new_mode": 33188,
      "new_path": "internal/ceres/partitioned_matrix_view.h"
    },
    {
      "type": "modify",
      "old_id": "d309e4fae17968ccc105270322eab794d9e3dbd4",
      "old_mode": 33188,
      "old_path": "internal/ceres/preconditioner.h",
      "new_id": "7e631473096f001309b9e2891ca2dce478a20d14",
      "new_mode": 33188,
      "new_path": "internal/ceres/preconditioner.h"
    },
    {
      "type": "modify",
      "old_id": "e0f7bf03ad85b3a745268c19cfa48abb02303bf4",
      "old_mode": 33188,
      "old_path": "internal/ceres/program_evaluator.h",
      "new_id": "826a73a9af1f2e15fcca7551516337c9e610e104",
      "new_mode": 33188,
      "new_path": "internal/ceres/program_evaluator.h"
    },
    {
      "type": "modify",
      "old_id": "adc15311e79fa8646f63b4b6c7bc5eaa9df58027",
      "old_mode": 33188,
      "old_path": "internal/ceres/schur_complement_solver.cc",
      "new_id": "3f8cfea91a9e99bb1a9ee6e06bd7f73e7e0083fb",
      "new_mode": 33188,
      "new_path": "internal/ceres/schur_complement_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "0f9e011354c7019df93d644a8b35714573ac4342",
      "old_mode": 33188,
      "old_path": "internal/ceres/schur_complement_solver.h",
      "new_id": "1ea9ad4c0bf67798cb5be102f8532a5cd1f957d6",
      "new_mode": 33188,
      "new_path": "internal/ceres/schur_complement_solver.h"
    },
    {
      "type": "modify",
      "old_id": "e03d2d99f734a25af1457703c61bbb78762c7e2b",
      "old_mode": 33188,
      "old_path": "internal/ceres/schur_eliminator.h",
      "new_id": "f77acbdd1a0a231aa1b1c7e4339dccfe3e6adc5a",
      "new_mode": 33188,
      "new_path": "internal/ceres/schur_eliminator.h"
    },
    {
      "type": "modify",
      "old_id": "25249eb4ef151e046d040f182975ca58eaf8a9eb",
      "old_mode": 33188,
      "old_path": "internal/ceres/sparse_cholesky.h",
      "new_id": "80c5cb2b83b187236a27b62b8a8407e22ca9ba1d",
      "new_mode": 33188,
      "new_path": "internal/ceres/sparse_cholesky.h"
    },
    {
      "type": "modify",
      "old_id": "604c7fc3e0cdb0fe9377a3cb617238f78be191a3",
      "old_mode": 33188,
      "old_path": "internal/ceres/suitesparse.h",
      "new_id": "60b415c0b826937c4498c3de6a74aadc6eb0d8e8",
      "new_mode": 33188,
      "new_path": "internal/ceres/suitesparse.h"
    },
    {
      "type": "modify",
      "old_id": "2c2bc1320825fffe59c52af9e08deb13a72bb5c7",
      "old_mode": 33188,
      "old_path": "internal/ceres/triplet_sparse_matrix.h",
      "new_id": "bcb452914f4a9aa3fc261f29267adc00c5f29d60",
      "new_mode": 33188,
      "new_path": "internal/ceres/triplet_sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "4df05105c43ac94140f425351402b75cd846b5be",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_minimizer.h",
      "new_id": "c6fc542a06387d52eeb83e2a81d2268a736ef06f",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_minimizer.h"
    },
    {
      "type": "modify",
      "old_id": "a1db8e86583638072852e80f9b203bcf61b32398",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_preprocessor.h",
      "new_id": "26ef8fad37d57cc01b89c4e65a513094e1d949d9",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_preprocessor.h"
    }
  ]
}
