MCPcopy Create free account
hub / github.com/apache/arrow / extract_group_ids_imp

Method extract_group_ids_imp

cpp/src/arrow/compute/key_map_internal.cc:98–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

96
97template <typename T, bool use_selection>
98void SwissTable::extract_group_ids_imp(const int num_keys, const uint16_t* selection,
99 const uint32_t* hashes, const uint8_t* local_slots,
100 uint32_t* out_group_ids) const {
101 if (log_blocks_ == 0) {
102 DCHECK_EQ(sizeof(T), sizeof(uint8_t));
103 for (int i = 0; i < num_keys; ++i) {
104 uint32_t id = use_selection ? selection[i] : i;
105 uint32_t group_id =
106 block_data(/*block_id=*/0,
107 /*num_block_bytes=*/0)[bytes_status_in_block_ + local_slots[id]];
108 out_group_ids[id] = group_id;
109 }
110 } else {
111 int num_groupid_bits = num_groupid_bits_from_log_blocks(log_blocks_);
112 DCHECK_EQ(sizeof(T) * 8, num_groupid_bits);
113 int num_block_bytes = num_block_bytes_from_num_groupid_bits(num_groupid_bits);
114
115 for (int i = 0; i < num_keys; ++i) {
116 uint32_t id = use_selection ? selection[i] : i;
117 uint32_t hash = hashes[id];
118 uint32_t block_id = block_id_from_hash(hash, log_blocks_);
119 const T* slots_base = reinterpret_cast<const T*>(
120 block_data(block_id, num_block_bytes) + bytes_status_in_block_);
121 uint32_t group_id = static_cast<uint32_t>(slots_base[local_slots[id]]);
122 out_group_ids[id] = group_id;
123 }
124 }
125}
126
127void SwissTable::extract_group_ids(const int num_keys, const uint16_t* optional_selection,
128 const uint32_t* hashes, const uint8_t* local_slots,

Callers

nothing calls this directly

Calls 4

block_dataFunction · 0.85
block_id_from_hashFunction · 0.85

Tested by

no test coverage detected