ProductGen Node1 ProductGen - m_ncounters - m_done + ProductGen() + ProductGen() + next() - atEnd() Node2 std::vector< std::size_t > + elements Node2->Node1 -m_ends -m_counters