)]}'
{
  "commit": "7743d2e73cf08f5c0b6e25acefd70428d523734a",
  "tree": "25378953115c43b51aad19d2d52073f61ad79075",
  "parents": [
    "9f32c42ba628dfa255cb85b0d16b29e29a8e802b"
  ],
  "author": {
    "name": "Sergiu Deitsch",
    "email": "sergiu.deitsch@gmail.com",
    "time": "Mon Feb 21 22:43:32 2022 +0100"
  },
  "committer": {
    "name": "Alex Stewart",
    "email": "alexs.mac@gmail.com",
    "time": "Wed Mar 02 23:57:10 2022 +0000"
  },
  "message": "Store ProductManifold instances in a tuple\n\nSince the number of manifolds used to initialize ProductManifold and\ntheir types are known at compile-time, it is possible to avoid storing\npointers to the base class as required by a homogeneous, currently\ndynamically sized container. Instead, we can use std::tuple\u003c\u003e as a\nheterogenous container with the number of elements fixed at compile-time\nthat allows us to store the concrete manifold realizations.\n\nThe advantage of this approach is that we can bypass the vtable when\niterating over each manifold within ProductManifold. The indirection is\ninvoked only once while accessing the ProductManifoldImpl members.\nAdditionally, potential dynamic memory allocations by a std::vector can\nbe completely avoided. This makes the ProductManifold implementation\nmore efficient both in memory and runtime.\n\nChange-Id: Ic71b0c175ab726f8992e9703f7666bca477baf19\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4f754c93281e9b27900c4d5ba439ad8c36be228b",
      "old_mode": 33188,
      "old_path": "docs/source/nnls_modeling.rst",
      "new_id": "5bc5382ac58973bb14bc366d3a338bdf46bfcf62",
      "new_mode": 33188,
      "new_path": "docs/source/nnls_modeling.rst"
    },
    {
      "type": "modify",
      "old_id": "b3590e9367e91dad9227c4f74c791f121db6810a",
      "old_mode": 33188,
      "old_path": "examples/bundle_adjuster.cc",
      "new_id": "d42a0d71641aeeaa570aba20d3a626c40286ed25",
      "new_mode": 33188,
      "new_path": "examples/bundle_adjuster.cc"
    },
    {
      "type": "modify",
      "old_id": "b67b5e66e25cf76dbbc15c2bf1618d1c6083415b",
      "old_mode": 33188,
      "old_path": "include/ceres/ceres.h",
      "new_id": "c32477d42543bb054f174ec6d784734aaf7f36b4",
      "new_mode": 33188,
      "new_path": "include/ceres/ceres.h"
    },
    {
      "type": "modify",
      "old_id": "d50de7ff1834febdc4b44f1811ccea75533adf46",
      "old_mode": 33188,
      "old_path": "include/ceres/manifold.h",
      "new_id": "24eac2325eb23297f09e92e0f197a2313faada98",
      "new_mode": 33188,
      "new_path": "include/ceres/manifold.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd6131fbea8221fb276d70be9278b8b59b9d0674",
      "new_mode": 33188,
      "new_path": "include/ceres/product_manifold.h"
    },
    {
      "type": "modify",
      "old_id": "b2ff9538c87632ff03c20793232cd8ae3c35f193",
      "old_mode": 33188,
      "old_path": "internal/ceres/manifold.cc",
      "new_id": "f412a793f938bb34d4de0ebfabcbe9f56ea5a536",
      "new_mode": 33188,
      "new_path": "internal/ceres/manifold.cc"
    },
    {
      "type": "modify",
      "old_id": "b697d0278df358d42941224d4c503d824a888f58",
      "old_mode": 33188,
      "old_path": "internal/ceres/manifold_test.cc",
      "new_id": "60f98d2eebd72e9cdbfdf9222e3efa852ee7daf2",
      "new_mode": 33188,
      "new_path": "internal/ceres/manifold_test.cc"
    }
  ]
}
