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