@@ -914,7 +914,6 @@ struct Aggregator::AggregatorImpl {
914914
915915 struct AggregateEntry {
916916 std::vector<Entry> key;
917- std::vector<Entry> hash_key;
918917 std::vector<std::unique_ptr<AggregateKernel>> kernels;
919918 std::size_t next_entry_idx;
920919 };
@@ -1020,38 +1019,29 @@ struct Aggregator::AggregatorImpl {
10201019 CaliperMetadataAccessInterface& db
10211020 )
10221021 {
1023- // --- make hash key from key nodes and immediates
1022+ // --- make key from key nodes and immediates
10241023
1025- std::vector<Entry> hash_key ;
1026- hash_key .reserve ((nodes_end - nodes_begin) + immediates.size ());
1027- hash_key. resize ((nodes_end - nodes_begin ));
1024+ std::vector<Entry> key ;
1025+ key .reserve (immediates.size () + 1 );
1026+ key. insert (key. end (), immediates. begin (), immediates. end ( ));
10281027
1029- std::transform (nodes_begin, nodes_end, hash_key.begin (), [](Node* n){ return Entry (n); });
1030- hash_key.insert (hash_key.end (), immediates.begin (), immediates.end ());
1028+ if (nodes_begin != nodes_end) {
1029+ std::vector<const Node*> rv_nodes (nodes_end - nodes_begin);
1030+ std::reverse_copy (nodes_begin, nodes_end, rv_nodes.begin ());
1031+ key.push_back (Entry (db.make_tree_entry (rv_nodes.size (), rv_nodes.data ())));
1032+ }
10311033
10321034 // --- lookup key
10331035
1034- std::size_t hash = compute_key_hash (hash_key ) % m_hashmap.size ();
1036+ std::size_t hash = compute_key_hash (key ) % m_hashmap.size ();
10351037 for (size_t i = m_hashmap[hash]; i; i = m_entries[i]->next_entry_idx ) {
10361038 auto e = m_entries[i];
1037- if (hash_key == e->hash_key )
1039+ if (key == e->key )
10381040 return e;
10391041 }
10401042
10411043 // --- hash key not found: create a new entry
10421044
1043- // -- merge key nodes into new tree entry to create compact key
1044-
1045- std::vector<Entry> key;
1046- key.reserve (immediates.size () + 1 );
1047- key.insert (key.end (), immediates.begin (), immediates.end ());
1048-
1049- if (nodes_begin != nodes_end) {
1050- std::vector<const Node*> rv_nodes (nodes_end - nodes_begin);
1051- std::reverse_copy (nodes_begin, nodes_end, rv_nodes.begin ());
1052- key.push_back (Entry (db.make_tree_entry (rv_nodes.size (), rv_nodes.data ())));
1053- }
1054-
10551045 std::vector<std::unique_ptr<AggregateKernel>> kernels;
10561046 kernels.reserve (m_kernel_configs.size ());
10571047
@@ -1061,7 +1051,6 @@ struct Aggregator::AggregatorImpl {
10611051 auto e = std::make_shared<AggregateEntry>();
10621052
10631053 e->key = std::move (key);
1064- e->hash_key = std::move (hash_key);
10651054 e->kernels = std::move (kernels);
10661055 e->next_entry_idx = m_hashmap[hash];
10671056
0 commit comments