| 178 | |
| 179 | template <typename Fn> |
| 180 | Result<std::shared_ptr<Array>> ArrayFromBuilderVisitor( |
| 181 | const std::shared_ptr<DataType>& type, int64_t initial_capacity, |
| 182 | int64_t visitor_repetitions, Fn&& fn) { |
| 183 | std::unique_ptr<ArrayBuilder> builder; |
| 184 | RETURN_NOT_OK(MakeBuilder(default_memory_pool(), type, &builder)); |
| 185 | |
| 186 | if (initial_capacity != 0) { |
| 187 | RETURN_NOT_OK(builder->Resize(initial_capacity)); |
| 188 | } |
| 189 | |
| 190 | VisitBuilder<Fn> visitor; |
| 191 | for (int64_t i = 0; i < visitor_repetitions; ++i) { |
| 192 | RETURN_NOT_OK( |
| 193 | VisitTypeInline(*builder->type(), &visitor, builder.get(), std::forward<Fn>(fn))); |
| 194 | } |
| 195 | |
| 196 | std::shared_ptr<Array> out; |
| 197 | RETURN_NOT_OK(builder->Finish(&out)); |
| 198 | return out; |
| 199 | } |
| 200 | |
| 201 | template <typename Fn> |
| 202 | Result<std::shared_ptr<Array>> ArrayFromBuilderVisitor( |