HLT::NestedUniqueCombinationGenerator Node1 HLT::NestedUniqueCombination Generator + add() + reset() + size() + operator()() + current() + operator++() + operator bool() - cache() Node2 std::vector< HLT::Unique CombinationGenerator > Node2->Node1 -m_generators Node3 HLT::UniqueCombinationGenerator - m_nElements - m_combLen + UniqueCombinationGenerator() + reset() + size() + operator()() + current() + operator++() + operator bool() Node3->Node2 +elements Node4 std::vector< size_t > + elements Node4->Node1 -m_current Node4->Node3 -m_current Node5 std::vector< bool > + elements Node5->Node3 -m_bitmask