Return the MemoryPoolBackend selected by the user through the ARROW_DEFAULT_MEMORY_POOL environment variable, if any.
| 102 | // Return the MemoryPoolBackend selected by the user through the |
| 103 | // ARROW_DEFAULT_MEMORY_POOL environment variable, if any. |
| 104 | std::optional<MemoryPoolBackend> UserSelectedBackend() { |
| 105 | static auto user_selected_backend = []() -> std::optional<MemoryPoolBackend> { |
| 106 | auto unsupported_backend = [](const std::string& name) { |
| 107 | std::vector<std::string> supported; |
| 108 | for (const auto backend : SupportedBackends()) { |
| 109 | supported.push_back(std::string("'") + backend.name + "'"); |
| 110 | } |
| 111 | ARROW_LOG(WARNING) << "Unsupported backend '" << name << "' specified in " |
| 112 | << kDefaultBackendEnvVar << " (supported backends are " |
| 113 | << internal::JoinStrings(supported, ", ") << ")"; |
| 114 | }; |
| 115 | |
| 116 | auto maybe_name = internal::GetEnvVar(kDefaultBackendEnvVar); |
| 117 | if (!maybe_name.ok()) { |
| 118 | return {}; |
| 119 | } |
| 120 | const auto name = *std::move(maybe_name); |
| 121 | if (name.empty()) { |
| 122 | // An empty environment variable is considered missing |
| 123 | return {}; |
| 124 | } |
| 125 | const auto found = std::find_if( |
| 126 | SupportedBackends().begin(), SupportedBackends().end(), |
| 127 | [&](const SupportedBackend& backend) { return name == backend.name; }); |
| 128 | if (found != SupportedBackends().end()) { |
| 129 | return found->backend; |
| 130 | } |
| 131 | unsupported_backend(name); |
| 132 | return {}; |
| 133 | }(); |
| 134 | |
| 135 | return user_selected_backend; |
| 136 | } |
| 137 | |
| 138 | MemoryPoolBackend DefaultBackend() { |
| 139 | auto backend = UserSelectedBackend(); |
no test coverage detected