inlined a fully specialized function template defined in a .hpp

release/4.3a0
Renaud Dube 2014-11-07 11:37:27 +01:00
parent a94835a2e4
commit bd3f9db7df
1 changed files with 58 additions and 53 deletions

View File

@ -58,7 +58,7 @@ class Expression;
class JacobianMap {
const FastVector<Key>& keys_;
VerticalBlockMatrix& Ab_;
public:
public:
JacobianMap(const FastVector<Key>& keys, VerticalBlockMatrix& Ab) :
keys_(keys), Ab_(Ab) {
}
@ -98,11 +98,16 @@ struct CallRecord {
template<int ROWS, int COLS>
void handleLeafCase(const Eigen::Matrix<double, ROWS, COLS>& dTdA,
JacobianMap& jacobians, Key key) {
// if (ROWS == -1 && COLS == -1 ) {
// jacobians(key) += dTdA;
// } else {
jacobians(key).block < ROWS, COLS > (0, 0) += dTdA; // block makes HUGE difference
// }
}
/// Handle Leaf Case for Dynamic Matrix type (slower)
template<>
void handleLeafCase(
inline void handleLeafCase(
const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& dTdA,
JacobianMap& jacobians, Key key) {
jacobians(key) += dTdA;
@ -140,7 +145,7 @@ class ExecutionTrace {
Key key;
CallRecord<Dim>* ptr;
} content;
public:
public:
/// Pointer always starts out as a Constant
ExecutionTrace() :
kind(Constant) {
@ -242,7 +247,7 @@ struct Select<2, A> {
template<class T>
class ExpressionNode {
protected:
protected:
size_t traceSize_;
@ -251,7 +256,7 @@ protected:
traceSize_(traceSize) {
}
public:
public:
/// Destructor
virtual ~ExpressionNode() {
@ -295,7 +300,7 @@ class ConstantExpression: public ExpressionNode<T> {
friend class Expression<T> ;
public:
public:
/// Return value
virtual T value(const Values& values) const {
@ -326,7 +331,7 @@ class LeafExpression: public ExpressionNode<T> {
friend class Expression<value_type> ;
public:
public:
/// Return keys that play in this expression
virtual std::set<Key> keys() const {
@ -372,7 +377,7 @@ class LeafExpression<T, DefaultChart<T> >: public ExpressionNode<T> {
friend class Expression<T> ;
public:
public:
/// Return keys that play in this expression
virtual std::set<Key> keys() const {
@ -623,13 +628,13 @@ struct FunctionalNode {
template<class T, class A1>
class UnaryExpression: public FunctionalNode<T, boost::mpl::vector<A1> >::type {
public:
public:
typedef boost::function<T(const A1&, typename OptionalJacobian<T, A1>::type)> Function;
typedef typename FunctionalNode<T, boost::mpl::vector<A1> >::type Base;
typedef typename Base::Record Record;
private:
private:
Function function_;
@ -642,7 +647,7 @@ private:
friend class Expression<T> ;
public:
public:
/// Return value
virtual T value(const Values& values) const {
@ -667,7 +672,7 @@ public:
template<class T, class A1, class A2>
class BinaryExpression: public FunctionalNode<T, boost::mpl::vector<A1, A2> >::type {
public:
public:
typedef boost::function<
T(const A1&, const A2&, typename OptionalJacobian<T, A1>::type,
@ -675,7 +680,7 @@ public:
typedef typename FunctionalNode<T, boost::mpl::vector<A1, A2> >::type Base;
typedef typename Base::Record Record;
private:
private:
Function function_;
@ -692,7 +697,7 @@ private:
friend class Expression<T> ;
friend class ::ExpressionFactorBinaryTest;
public:
public:
/// Return value
virtual T value(const Values& values) const {
@ -721,7 +726,7 @@ public:
template<class T, class A1, class A2, class A3>
class TernaryExpression: public FunctionalNode<T, boost::mpl::vector<A1, A2, A3> >::type {
public:
public:
typedef boost::function<
T(const A1&, const A2&, const A3&, typename OptionalJacobian<T, A1>::type,
@ -729,7 +734,7 @@ public:
typedef typename FunctionalNode<T, boost::mpl::vector<A1, A2, A3> >::type Base;
typedef typename Base::Record Record;
private:
private:
Function function_;
@ -746,7 +751,7 @@ private:
friend class Expression<T> ;
public:
public:
/// Return value
virtual T value(const Values& values) const {