Fixed bug

release/4.3a0
dellaert 2014-10-13 00:57:11 +02:00
parent 2e8d868cd2
commit 7f621af54a
1 changed files with 13 additions and 15 deletions

View File

@ -332,7 +332,6 @@ public:
return keys; return keys;
} }
// Return size needed for memory buffer in traceExecution // Return size needed for memory buffer in traceExecution
size_t traceSize() const { size_t traceSize() const {
return traceSize_; return traceSize_;
@ -537,8 +536,8 @@ struct FunctionalNode: public boost::mpl::fold<TYPES, ExpressionNode<T>,
/// Access Expression /// Access Expression
template<class A, size_t N> template<class A, size_t N>
boost::shared_ptr<ExpressionNode<A> > expression() { void reset(const boost::shared_ptr<ExpressionNode<A> >& ptr) {
return static_cast<Argument<T, A, N> &>(*this).expression; static_cast<Argument<T, A, N> &>(*this).expression = ptr;
} }
/// Access Expression, const version /// Access Expression, const version
@ -567,7 +566,7 @@ private:
/// Constructor with a unary function f, and input argument e /// Constructor with a unary function f, and input argument e
UnaryExpression(Function f, const Expression<A1>& e1) : UnaryExpression(Function f, const Expression<A1>& e1) :
function_(f) { function_(f) {
this->template expression<A1, 1>() = e1.root(); this->template reset<A1, 1>(e1.root());
ExpressionNode<T>::traceSize_ = sizeof(Record) + e1.traceSize(); ExpressionNode<T>::traceSize_ = sizeof(Record) + e1.traceSize();
} }
@ -630,8 +629,8 @@ private:
BinaryExpression(Function f, const Expression<A1>& e1, BinaryExpression(Function f, const Expression<A1>& e1,
const Expression<A2>& e2) : const Expression<A2>& e2) :
function_(f) { function_(f) {
this->template expression<A1, 1>() = e1.root(); this->template reset<A1, 1>(e1.root());
this->template expression<A2, 2>() = e2.root(); this->template reset<A2, 2>(e2.root());
ExpressionNode<T>::traceSize_ = // ExpressionNode<T>::traceSize_ = //
sizeof(Record) + e1.traceSize() + e2.traceSize(); sizeof(Record) + e1.traceSize() + e2.traceSize();
} }
@ -678,7 +677,6 @@ public:
raw = raw + this->template expression<A1, 1>()->traceSize(); raw = raw + this->template expression<A1, 1>()->traceSize();
A2 a2 = this->template expression<A2, 2>()->traceExecution(values, A2 a2 = this->template expression<A2, 2>()->traceExecution(values,
record->template trace<A2, 2>(), raw); record->template trace<A2, 2>(), raw);
raw = raw + this->template expression<A2, 2>()->traceSize();
return function_(a1, a2, record->template jacobian<A1, 1>(), return function_(a1, a2, record->template jacobian<A1, 1>(),
record->template jacobian<A2, 2>()); record->template jacobian<A2, 2>());
@ -708,9 +706,9 @@ private:
TernaryExpression(Function f, const Expression<A1>& e1, TernaryExpression(Function f, const Expression<A1>& e1,
const Expression<A2>& e2, const Expression<A3>& e3) : const Expression<A2>& e2, const Expression<A3>& e3) :
function_(f) { function_(f) {
this->template expression<A1, 1>() = e1.root(); this->template reset<A1, 1>(e1.root());
this->template expression<A2, 2>() = e2.root(); this->template reset<A2, 2>(e2.root());
this->template expression<A3, 3>() = e3.root(); this->template reset<A3, 3>(e3.root());
ExpressionNode<T>::traceSize_ = // ExpressionNode<T>::traceSize_ = //
sizeof(Record) + e1.traceSize() + e2.traceSize() + e3.traceSize(); sizeof(Record) + e1.traceSize() + e2.traceSize() + e3.traceSize();
} }