Go to the documentation of this file.00001
00029 #pragma once
00030
00031 #include <vector>
00032 #include <utility>
00033 #include <list>
00034 #include <Eigen/Dense>
00035
00036 #define USE_TR1
00037 #ifdef USE_TR1
00038 #include <tr1/unordered_map>
00039 #else
00040 #include "boost/unordered_map.hpp"
00041 #endif
00042
00043 #include "SparseMatrix.h"
00044
00045 namespace isam {
00046
00047 #ifdef USE_TR1
00048 #include <tr1/unordered_map>
00049 typedef std::tr1::unordered_map<int, double> umap;
00050 #else
00051 typedef boost::unordered_map<int, double> umap;
00052 #endif
00053
00054 class CovarianceCache {
00055 public:
00056 umap entries;
00057
00058 std::vector<double> diag;
00059
00060 std::vector<SparseVector> rows;
00061
00062 std::vector<unsigned int> rows_valid;
00063
00064 unsigned int current_valid;
00065
00066 int num_calc;
00067
00068 CovarianceCache () {
00069 current_valid = 1;
00070 }
00071 };
00072
00073 typedef std::vector< std::vector<int> > index_lists_t;
00074 typedef std::vector< std::pair<int, int> > entry_list_t;
00075
00085 std::list<Eigen::MatrixXd> cov_marginal(const SparseMatrix& R, CovarianceCache& cache,
00086 const index_lists_t& index_lists,
00087 bool debug=false, int step=-1);
00088
00099 std::list<double> cov_marginal(const SparseMatrix& R, CovarianceCache& cache,
00100 const entry_list_t& entry_list);
00101
00102 }