template<class T> class BinTree { public:The iterator effectively determines the order in which the specified functor is passed to the group members and must have the -> operator defined, in the case the iterator is not a C++ pointer type.
typedef ObjectPtr<T>* iterator; BinTree() { slot = 0; } void join(ObjectPtr<T> obj) { ObjectPtr<T> NIL; if (child[slot] == NIL) child[slot] = obj; else child[slot]->apply( m2f(&join,obj) ); slot = (slot+1) % 2; } iterator begin() { return &child[0]; } iterator end() { return &child[2]; } int size() const { return 2; } protected: ObjectPtr<T> child[2]; int slot; };
Most of TACO's topology classes also provide a join() method to add new members dynamically to the group. This is also a prerequisite to apply the GroupOf and CollectionOf classes to create entire collections with an a priori known size. Note, that the code to build the distributed tree recursively has nearly the same structure as the code for a local tree and distributed programs can be written with the same ease as local programs.