Breakpoint 1, main () at Array.cpp:13 13 a = b + c + d; //Create Binary Tree at ArrayOperators.h:268 268 return MakeReturn::make(Tree_t( //Source code template inline typename MakeReturn >::Leaf_t, typename CreateLeaf >::Leaf_t> >::Expression_t operator+(const Array & l,const Array & r) { typedef BinaryNode >::Leaf_t, typename CreateLeaf >::Leaf_t> Tree_t; return MakeReturn::make(Tree_t( CreateLeaf >::make(l), CreateLeaf >::make(r))); } //Create Leaf for the tree at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } //Source code template< class T> struct CreateLeaf > { typedef Reference > Leaf_t; inline static Leaf_t make(const Array &a) { return Leaf_t(a); } }; //Create Leaf for the tree at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } //Construct another tree at ArrayOperators.h:268 268 return MakeReturn::make(Tree_t( at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } at ArrayOperators.h:268 268 return MakeReturn::make(Tree_t( //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; template struct Reference { ...... inline const T &reference() const { return reference_m; } ...... const T &reference_m; }; at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; at ArrayOperators.h:268 268 return MakeReturn::make(Tree_t( //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:142 142 Expression_t make(const T &a) { return Expression_t(a); } template struct MakeReturn { typedef Expression Expression_t; inline static Expression_t make(const T &a) { return Expression_t(a); } }; //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } template class BinaryNode { public: inline const Op &operation() const { return op_m; } ...... private: //--------------------------------------------------------------------------- // The operation and left/right sub expressions stored in this node of the // tree. Op op_m; Left left_m; Right right_m; }; //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } template class BinaryNode { public: inline typename DeReference::Return_t left() const { return DeReference::apply(left_m); } ...... private: //--------------------------------------------------------------------------- // The operation and left/right sub expressions stored in this node of the // tree. Op op_m; Left left_m; Right right_m; }; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } template struct DeReference > { typedef const T &Return_t; typedef T Type_t; static inline Return_t apply(const Reference &a) { return a.reference(); } }; //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:142 142 Expression_t make(const T &a) { return Expression_t(a); } //Create Binary Tree(both nodes are Array) at ArrayOperators.h:268 268 return MakeReturn::make(Tree_t( //Create Binary Tree(left node is Expression, right node is Array) at ArrayOperators.h:884 884 return MakeReturn::make(Tree_t( template inline typename MakeReturn >::Leaf_t, typename CreateLeaf >::Leaf_t> >::Expression_t operator+(const Expression & l,const Array & r) { typedef BinaryNode >::Leaf_t, typename CreateLeaf >::Leaf_t> Tree_t; return MakeReturn::make(Tree_t( CreateLeaf >::make(l), CreateLeaf >::make(r))); } //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:119 119 return a.expression(); template struct CreateLeaf > { typedef typename Expression::Expression_t Leaf_t; inline static const Leaf_t &make(const Expression &a) { return a.expression(); } }; // Accessor that returns the expression. at /home/goliath/para/pete/src/PETE/CreateLeaf.h:64 64 return expr_m; const Expression_t& expression() const { return expr_m; } //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:119 119 return a.expression(); //Create Binary Tree(left node is Expression, right node is Array) at ArrayOperators.h:884 884 return MakeReturn::make(Tree_t( //Create Leaf for the tree at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } //Create Leaf for the tree at Array.h:199 199 Leaf_t make(const Array &a) { return Leaf_t(a); } //Create Binary Tree(left node is Expression, right node is Array) at ArrayOperators.h:884 884 return MakeReturn::make(Tree_t( //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //Create Binary Tree(left node is Expression, right node is Array) at ArrayOperators.h:884 884 return MakeReturn::make(Tree_t( //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:142 142 Expression_t make(const T &a) { return Expression_t(a); } //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //unwraps the Reference struct, gives (const T &) at /home/goliath/para/pete/src/PETE/TreeNodes.h:110 110 static inline Return_t apply(const T &a) { return a; } template struct DeReference { typedef const T &Return_t; typedef T Type_t; static inline Return_t apply(const T &a) { return a; } }; //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //make the expression at /home/goliath/para/pete/src/PETE/CreateLeaf.h:142 142 Expression_t make(const T &a) { return Expression_t(a); } //Create Binary Tree(left node is Expression, right node is Array) at ArrayOperators.h:884 884 return MakeReturn::make(Tree_t( //now i=0, so begins first loop at Array.h:93 93 for(long i=0; isize; i++) 94 d[i] = forEach(rhs, EvalLeaf1(i), OpCombine()); //evaluate leaves using 1-d integer index. at /home/goliath/para/pete/src/PETE/Functors.h:95 95 inline EvalLeaf1(int i1) : i1_m(i1) { } struct EvalLeaf1 { int i1_m; inline EvalLeaf1(int i1) : i1_m(i1) { } inline int val1() const { return i1_m; } }; //Traverses the expression tree defined by e, applies the functor f // to each leaf and combines the results together using the combiner c. at /home/goliath/para/pete/src/PETE/ForEach.h:89 89 return ForEach::apply(e, f, c); template inline typename ForEach::Type_t forEach(const Expr &e, const FTag &f, const CTag &c) { return ForEach::apply(e, f, c); } // at /home/goliath/para/pete/src/PETE/ForEach.h:156 156 return ForEach::apply(expr.expression(), f, c); template class Expression; template struct ForEach, FTag, CTag> { typedef typename ForEach::Type_t Type_t; inline static Type_t apply(const Expression &expr, const FTag &f, const CTag &c) { return ForEach::apply(expr.expression(), f, c); } }; // Accessor that returns the expression. at /home/goliath/para/pete/src/PETE/CreateLeaf.h:64 64 return expr_m; // at /home/goliath/para/pete/src/PETE/ForEach.h:156 156 return ForEach::apply(expr.expression(), f, c); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: template struct ForEach, FTag, CTag > { typedef typename ForEach::Type_t TypeA_t; typedef typename ForEach::Type_t TypeB_t; typedef typename Combine2::Type_t Type_t; inline static Type_t apply(const BinaryNode &expr, const FTag &f, const CTag &c) { return Combine2:: combine(ForEach::apply(expr.left(), f, c), ForEach::apply(expr.right(), f, c), expr.operation(), c); } }; //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //unwraps the Reference struct, gives (const T &) at /home/goliath/para/pete/src/PETE/TreeNodes.h:110 110 static inline Return_t apply(const T &a) { return a; } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:239 239 left() const { return DeReference::apply(left_m); } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); template struct Reference; template struct ForEach, FTag, CTag> { typedef typename ForEach::Type_t Type_t; inline static Type_t apply(const Reference &ref, const FTag &f, const CTag &c) { return ForEach::apply(ref.reference(), f, c); } }; //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); template struct ForEach { typedef typename LeafFunctor::Type_t Type_t; inline static Type_t apply(const Expr &expr, const FTag &f, const CTag &) { return LeafFunctor::apply(expr, f); } }; //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } template struct LeafFunctor, EvalLeaf1> { typedef T Type_t; static Type_t apply(const Array &a, const EvalLeaf1 &f) { return a[f.val1()]; } }; //Return the index at /home/goliath/para/pete/src/PETE/Functors.h:96 96 inline int val1() const { return i1_m; } struct EvalLeaf1 { int i1_m; inline EvalLeaf1(int i1) : i1_m(i1) { } inline int val1() const { return i1_m; } }; //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Indexing operator (this=0x2ff22948, i=0) at Array.h:103 103 T operator[](long i) const { return d[i]; } //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Return the index at /home/goliath/para/pete/src/PETE/Functors.h:96 96 inline int val1() const { return i1_m; } //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Indexing operator (this=0x2ff22948, i=0) at Array.h:103 103 T operator[](long i) const { return d[i]; } //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //A combiner that uses the operations in the expression tree. (a=0, b=0, op={}) at /home/goliath/para/pete/src/PETE/Combiners.h:239 239 return op(a, b); template struct Combine2 { typedef typename BinaryReturn::Type_t Type_t; inline static Type_t combine(A a, B b, Op op, OpCombine) { return op(a, b); } }; //calculate the result (this=0x2ff22730, a=@0x2ff22728, b=@0x2ff2272c) at /home/goliath/para/pete/src/PETE/OperatorTags.h:305 305 return (a + b); struct OpAdd { PETE_EMPTY_CONSTRUCTORS(OpAdd) template inline typename BinaryReturn::Type_t operator()(const T1 &a, const T2 &b) const { return (a + b); } }; //A combiner that uses the operations in the expression tree. (a=0, b=0, op={}) at /home/goliath/para/pete/src/PETE/Combiners.h:239 239 return op(a, b); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; //unwraps the Reference struct, gives a const ref to the wrapped object. at /home/goliath/para/pete/src/PETE/TreeNodes.h:118 118 static inline Return_t apply(const Reference &a) { return a.reference(); } //Accessor making the children available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:243 243 right() const { return DeReference::apply(right_m); } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //create the reference of the nodes of the binary tree at /home/goliath/para/pete/src/PETE/TreeNodes.h:80 80 return reference_m; // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Return the index at /home/goliath/para/pete/src/PETE/Functors.h:96 96 inline int val1() const { return i1_m; } //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Indexing operator (this=0x2ff22948, i=0) at Array.h:103 103 T operator[](long i) const { return d[i]; } //returns the array evaluated at the point. at Array.h:224 224 { return a[f.val1()]; } //Default behaviour for a leaf. at /home/goliath/para/pete/src/PETE/ForEach.h:81 81 return LeafFunctor::apply(expr, f); // at /home/goliath/para/pete/src/PETE/ForEach.h:172 172 return ForEach::apply(ref.reference(), f, c); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //Accessor making the operation available to the outside. at /home/goliath/para/pete/src/PETE/TreeNodes.h:235 235 const Op &operation() const { return op_m; } //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: //A combiner that uses the operations in the expression tree. (a=0, b=0, op={}) at /home/goliath/para/pete/src/PETE/Combiners.h:239 239 return op(a, b); //calculate the result (this=0x2ff22730, a=@0x2ff22728, b=@0x2ff2272c) at /home/goliath/para/pete/src/PETE/OperatorTags.h:305 305 return (a + b); //A combiner that uses the operations in the expression tree. (a=0, b=0, op={}) at /home/goliath/para/pete/src/PETE/Combiners.h:239 239 return op(a, b); //Combine the binary nodes at /home/goliath/para/pete/src/PETE/ForEach.h:117 117 return Combine2:: // at /home/goliath/para/pete/src/PETE/ForEach.h:156 156 return ForEach::apply(expr.expression(), f, c); //Traverses the expression tree defined by e, applies the functor f // to each leaf and combines the results together using the combiner c. at /home/goliath/para/pete/src/PETE/ForEach.h:89 89 return ForEach::apply(e, f, c); **** Repeat above codes when i = 1,2,3....... **** //now i=4, So i=this->size, then break this loop at Array.h:93 93 for(long i=0; isize; i++) // return the pointer of the result at Array.h:95 95 return *this; //terminate the program. main () at Array.cpp:15 15 return 0; ****** The END ************