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"
41void MergeIntoUpdate(
const ModelUpdateProto& from, ModelUpdateProto& into);
48 google::protobuf::RepeatedField<int64_t>& into);
55template <
typename SparseVector>
61 SparseDoubleMatrixProto& into);
71template <
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));
#define CHECK_EQ(val1, val2)
void MergeIntoSparseVector(const SparseVector &from, SparseVector &into)
void MergeIntoSparseDoubleMatrix(const SparseDoubleMatrixProto &from, SparseDoubleMatrixProto &into)
void MergeIntoSortedIds(const google::protobuf::RepeatedField< int64_t > &from, google::protobuf::RepeatedField< int64_t > &into)
void MergeIntoUpdate(const ModelUpdateProto &from, ModelUpdateProto &into)
Collection of objects used to extend the Constraint Solver library.