File indexing completed on 2025-08-28 08:27:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #pragma once
0019
0020 #include <utility>
0021
0022 #include "arrow/result.h"
0023
0024 namespace arrow {
0025 namespace internal {
0026
0027
0028
0029
0030
0031 template <typename Map, typename Gen>
0032 auto GetOrInsertGenerated(Map* map, typename Map::key_type key, Gen&& gen)
0033 -> decltype(map->begin()->second = gen(map->begin()->first), map->begin()) {
0034 decltype(gen(map->begin()->first)) placeholder{};
0035
0036 auto it_success = map->emplace(std::move(key), std::move(placeholder));
0037 if (it_success.second) {
0038
0039 const auto& inserted_key = it_success.first->first;
0040 auto* value = &it_success.first->second;
0041 *value = gen(inserted_key);
0042 }
0043 return it_success.first;
0044 }
0045
0046 template <typename Map, typename Gen>
0047 auto GetOrInsertGenerated(Map* map, typename Map::key_type key, Gen&& gen)
0048 -> Result<decltype(map->begin()->second = gen(map->begin()->first).ValueOrDie(),
0049 map->begin())> {
0050 decltype(gen(map->begin()->first).ValueOrDie()) placeholder{};
0051
0052 auto it_success = map->emplace(std::move(key), std::move(placeholder));
0053 if (it_success.second) {
0054
0055 const auto& inserted_key = it_success.first->first;
0056 auto* value = &it_success.first->second;
0057 ARROW_ASSIGN_OR_RAISE(*value, gen(inserted_key));
0058 }
0059 return it_success.first;
0060 }
0061
0062 }
0063 }