| 88 | // assume both src_key and dst_key are ordered, |
| 89 | template <typename K, typename V, class Op = OpPlus<V>> |
| 90 | void parallelUnion( |
| 91 | const SArray<K>& key1, |
| 92 | const SArray<V>& val1, |
| 93 | const SArray<K>& key2, |
| 94 | const SArray<V>& val2, |
| 95 | SArray<K>* joined_key, |
| 96 | SArray<V>* joined_val, |
| 97 | int num_threads = FLAGS_num_threads) { |
| 98 | CHECK_NOTNULL(joined_key); |
| 99 | CHECK_NOTNULL(joined_val); |
| 100 | *joined_key = key1.setUnion(key2); |
| 101 | joined_val->resize(0); |
| 102 | auto n1 = parallelOrderedMatch<K,V,Op>( |
| 103 | key1, val1, *joined_key, joined_val, num_threads); |
| 104 | CHECK_EQ(n1, key1.size()); |
| 105 | |
| 106 | auto n2 = parallelOrderedMatch<K,V,Op>( |
| 107 | key2, val2, *joined_key, joined_val, num_threads); |
| 108 | CHECK_EQ(n2, key2.size()); |
| 109 | } |
| 110 | |
| 111 | |
| 112 | } // namespace PS |