/usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util
Edit: /usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util/vector.h (5665B)
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#pragma once
#include
#include
#include
#include "arrow/result.h"
#include "arrow/util/algorithm.h"
#include "arrow/util/functional.h"
#include "arrow/util/logging.h"
namespace arrow {
namespace internal {
template
std::vector DeleteVectorElement(const std::vector& values, size_t index) {
DCHECK(!values.empty());
DCHECK_LT(index, values.size());
std::vector out;
out.reserve(values.size() - 1);
for (size_t i = 0; i < index; ++i) {
out.push_back(values[i]);
}
for (size_t i = index + 1; i < values.size(); ++i) {
out.push_back(values[i]);
}
return out;
}
template
std::vector AddVectorElement(const std::vector& values, size_t index,
T new_element) {
DCHECK_LE(index, values.size());
std::vector out;
out.reserve(values.size() + 1);
for (size_t i = 0; i < index; ++i) {
out.push_back(values[i]);
}
out.emplace_back(std::move(new_element));
for (size_t i = index; i < values.size(); ++i) {
out.push_back(values[i]);
}
return out;
}
template
std::vector ReplaceVectorElement(const std::vector& values, size_t index,
T new_element) {
DCHECK_LE(index, values.size());
std::vector out;
out.reserve(values.size());
for (size_t i = 0; i < index; ++i) {
out.push_back(values[i]);
}
out.emplace_back(std::move(new_element));
for (size_t i = index + 1; i < values.size(); ++i) {
out.push_back(values[i]);
}
return out;
}
template
std::vector FilterVector(std::vector values, Predicate&& predicate) {
auto new_end =
std::remove_if(values.begin(), values.end(), std::forward(predicate));
values.erase(new_end, values.end());
return values;
}
template ()(std::declval()))>
std::vector MapVector(Fn&& map, const std::vector& source) {
std::vector out;
out.reserve(source.size());
std::transform(source.begin(), source.end(), std::back_inserter(out),
std::forward(map));
return out;
}
template ()(std::declval()))>
std::vector MapVector(Fn&& map, std::vector&& source) {
std::vector out;
out.reserve(source.size());
std::transform(std::make_move_iterator(source.begin()),
std::make_move_iterator(source.end()), std::back_inserter(out),
std::forward(map));
return out;
}
/// \brief Like MapVector, but where the function can fail.
template ,
typename To = typename internal::call_traits::return_type::ValueType>
Result> MaybeMapVector(Fn&& map, const std::vector& source) {
std::vector out;
out.reserve(source.size());
ARROW_RETURN_NOT_OK(MaybeTransform(source.begin(), source.end(),
std::back_inserter(out), std::forward(map)));
return std::move(out);
}
template ,
typename To = typename internal::call_traits::return_type::ValueType>
Result> MaybeMapVector(Fn&& map, std::vector&& source) {
std::vector out;
out.reserve(source.size());
ARROW_RETURN_NOT_OK(MaybeTransform(std::make_move_iterator(source.begin()),
std::make_move_iterator(source.end()),
std::back_inserter(out), std::forward(map)));
return std::move(out);
}
template
std::vector FlattenVectors(const std::vector>& vecs) {
std::size_t sum = 0;
for (const auto& vec : vecs) {
sum += vec.size();
}
std::vector out;
out.reserve(sum);
for (const auto& vec : vecs) {
out.insert(out.end(), vec.begin(), vec.end());
}
return out;
}
template
Result> UnwrapOrRaise(std::vector>&& results) {
std::vector out;
out.reserve(results.size());
auto end = std::make_move_iterator(results.end());
for (auto it = std::make_move_iterator(results.begin()); it != end; it++) {
if (!it->ok()) {
return it->status();
}
out.push_back(it->MoveValueUnsafe());
}
return std::move(out);
}
template
Result> UnwrapOrRaise(const std::vector>& results) {
std::vector out;
out.reserve(results.size());
for (const auto& result : results) {
if (!result.ok()) {
return result.status();
}
out.push_back(result.ValueUnsafe());
}
return std::move(out);
}
} // namespace internal
} // namespace arrow