14 #ifndef OR_TOOLS_MATH_OPT_CORE_MODEL_UPDATE_MERGE_H_ 15 #define OR_TOOLS_MATH_OPT_CORE_MODEL_UPDATE_MERGE_H_ 21 #include "ortools/math_opt/model_update.pb.h" 22 #include "ortools/math_opt/sparse_containers.pb.h" 41 void MergeIntoUpdate(
const ModelUpdateProto& from, ModelUpdateProto& into);
48 google::protobuf::RepeatedField<int64_t>& into);
55 template <
typename SparseVector>
61 SparseDoubleMatrixProto& into);
71 template <
typename SparseVector>
73 CHECK_EQ(from.ids_size(), from.values_size());
74 CHECK_EQ(into.ids_size(), into.values_size());
77 auto& result_ids = *result.mutable_ids();
78 auto& result_values = *result.mutable_values();
83 const int max_size =
std::max(from.ids_size(), into.ids_size());
84 result_ids.Reserve(max_size);
85 result_values.Reserve(max_size);
89 while (from_i < from.ids_size() && into_i < into.ids_size()) {
90 if (from.ids(from_i) < into.ids(into_i)) {
91 result_ids.Add(from.ids(from_i));
92 result_values.Add(from.values(from_i));
94 }
else if (from.ids(from_i) > into.ids(into_i)) {
95 result_ids.Add(into.ids(into_i));
96 result_values.Add(into.values(into_i));
99 result_ids.Add(from.ids(from_i));
100 result_values.Add(from.values(from_i));
109 const int remaining_size =
110 std::max(from.ids_size() - from_i, into.ids_size() - into_i);
111 result_ids.Reserve(result_ids.size() + remaining_size);
112 result_values.Reserve(result_values.size() + remaining_size);
113 for (; from_i < from.ids_size(); ++from_i) {
114 result_ids.Add(from.ids(from_i));
115 result_values.Add(from.values(from_i));
117 for (; into_i < into.ids_size(); ++into_i) {
118 result_ids.Add(into.ids(into_i));
119 result_values.Add(into.values(into_i));
129 #endif // OR_TOOLS_MATH_OPT_CORE_MODEL_UPDATE_MERGE_H_ void MergeIntoSortedIds(const google::protobuf::RepeatedField< int64_t > &from, google::protobuf::RepeatedField< int64_t > &into)
void MergeIntoSparseVector(const SparseVector &from, SparseVector &into)
void MergeIntoUpdate(const ModelUpdateProto &from, ModelUpdateProto &into)
#define CHECK_EQ(val1, val2)
Collection of objects used to extend the Constraint Solver library.
void MergeIntoSparseDoubleMatrix(const SparseDoubleMatrixProto &from, SparseDoubleMatrixProto &into)