Comments
							parent
							
								
									74269902d7
								
							
						
					
					
						commit
						c11d7885e1
					
				|  | @ -552,10 +552,16 @@ struct GenerateFunctionalNode: Argument<T, A, Base::N + 1>, Base { | |||
| 
 | ||||
|   /// Construct an execution trace for reverse AD
 | ||||
|   void trace(const Values& values, Record* record, char*& raw) const { | ||||
|     Base::trace(values, record, raw); | ||||
|     Base::trace(values, record, raw); // recurse
 | ||||
|     // Write an Expression<A> execution trace in record->trace
 | ||||
|     // Iff Constant or Leaf, this will not write to raw, only to trace.
 | ||||
|     // Iff the expression is functional, write all Records in raw buffer
 | ||||
|     // Return value of type T is recorded in record->value
 | ||||
|     record->Record::This::value = This::expression->traceExecution(values, | ||||
|         record->Record::This::trace, raw); | ||||
|     raw = raw + This::expression->traceSize(); | ||||
|     // raw is never modified by traceExecution, but if traceExecution has
 | ||||
|     // written in the buffer, the next caller expects we advance the pointer
 | ||||
|     raw += This::expression->traceSize(); | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
|  | @ -590,12 +596,6 @@ struct FunctionalNode { | |||
|         return static_cast<JacobianTrace<T, A, N> const &>(*this).value; | ||||
|       } | ||||
| 
 | ||||
|       /// Access Trace
 | ||||
|       template<class A, size_t N> | ||||
|       ExecutionTrace<A>& trace() { | ||||
|         return static_cast<JacobianTrace<T, A, N>&>(*this).trace; | ||||
|       } | ||||
| 
 | ||||
|       /// Access Jacobian
 | ||||
|       template<class A, size_t N> | ||||
|       typename Jacobian<T, A>::type& jacobian() { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue