Skip to content

Commit

Permalink
Now using memcpy correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
jajhall committed Apr 6, 2023
1 parent f83568f commit 48ada68
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 32 deletions.
109 changes: 77 additions & 32 deletions src/interfaces/highs_c_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1088,38 +1088,83 @@ HighsInt Highs_getRanging(
if (status == (HighsInt)HighsStatus::kError) return status;
HighsInt num_col = ((Highs*)highs)->getNumCol();
HighsInt num_row = ((Highs*)highs)->getNumRow();
for (HighsInt i = 0; i < num_col; i++) {
col_cost_up_value[i] = ranging.col_cost_up.value_[i];
col_cost_up_objective[i] = ranging.col_cost_up.objective_[i];
col_cost_up_in_var[i] = ranging.col_cost_up.in_var_[i];
col_cost_up_ou_var[i] = ranging.col_cost_up.ou_var_[i];

col_cost_dn_value[i] = ranging.col_cost_dn.value_[i];
col_cost_dn_objective[i] = ranging.col_cost_dn.objective_[i];
col_cost_dn_in_var[i] = ranging.col_cost_dn.in_var_[i];
col_cost_dn_ou_var[i] = ranging.col_cost_dn.ou_var_[i];

col_bound_up_value[i] = ranging.col_bound_up.value_[i];
col_bound_up_objective[i] = ranging.col_bound_up.objective_[i];
col_bound_up_in_var[i] = ranging.col_bound_up.in_var_[i];
col_bound_up_ou_var[i] = ranging.col_bound_up.ou_var_[i];

col_bound_dn_value[i] = ranging.col_bound_dn.value_[i];
col_bound_dn_objective[i] = ranging.col_bound_dn.objective_[i];
col_bound_dn_in_var[i] = ranging.col_bound_dn.in_var_[i];
col_bound_dn_ou_var[i] = ranging.col_bound_dn.ou_var_[i];
}
for (HighsInt i = 0; i < num_row; i++) {
row_bound_up_value[i] = ranging.row_bound_up.value_[i];
row_bound_up_objective[i] = ranging.row_bound_up.objective_[i];
row_bound_up_in_var[i] = ranging.row_bound_up.in_var_[i];
row_bound_up_ou_var[i] = ranging.row_bound_up.ou_var_[i];

row_bound_dn_value[i] = ranging.row_bound_dn.value_[i];
row_bound_dn_objective[i] = ranging.row_bound_dn.objective_[i];
row_bound_dn_in_var[i] = ranging.row_bound_dn.in_var_[i];
row_bound_dn_ou_var[i] = ranging.row_bound_dn.ou_var_[i];
}
if (col_cost_up_value)
memcpy(col_cost_up_value, ranging.col_cost_up.value_.data(),
num_col * sizeof(double));
if (col_cost_up_objective)
memcpy(col_cost_up_objective, ranging.col_cost_up.objective_.data(),
num_col * sizeof(double));
if (col_cost_up_in_var)
memcpy(col_cost_up_in_var, ranging.col_cost_up.in_var_.data(),
num_col * sizeof(HighsInt));
if (col_cost_up_ou_var)
memcpy(col_cost_up_ou_var, ranging.col_cost_up.ou_var_.data(),
num_col * sizeof(HighsInt));

if (col_cost_dn_value)
memcpy(col_cost_dn_value, ranging.col_cost_dn.value_.data(),
num_col * sizeof(double));
if (col_cost_dn_objective)
memcpy(col_cost_dn_objective, ranging.col_cost_dn.objective_.data(),
num_col * sizeof(double));
if (col_cost_dn_in_var)
memcpy(col_cost_dn_in_var, ranging.col_cost_dn.in_var_.data(),
num_col * sizeof(HighsInt));
if (col_cost_dn_ou_var)
memcpy(col_cost_dn_ou_var, ranging.col_cost_dn.ou_var_.data(),
num_col * sizeof(HighsInt));

if (col_bound_up_value)
memcpy(col_bound_up_value, ranging.col_bound_up.value_.data(),
num_col * sizeof(double));
if (col_bound_up_objective)
memcpy(col_bound_up_objective, ranging.col_bound_up.objective_.data(),
num_col * sizeof(double));
if (col_bound_up_in_var)
memcpy(col_bound_up_in_var, ranging.col_bound_up.in_var_.data(),
num_col * sizeof(HighsInt));
if (col_bound_up_ou_var)
memcpy(col_bound_up_ou_var, ranging.col_bound_up.ou_var_.data(),
num_col * sizeof(HighsInt));

if (col_bound_dn_value)
memcpy(col_bound_dn_value, ranging.col_bound_dn.value_.data(),
num_col * sizeof(double));
if (col_bound_dn_objective)
memcpy(col_bound_dn_objective, ranging.col_bound_dn.objective_.data(),
num_col * sizeof(double));
if (col_bound_dn_in_var)
memcpy(col_bound_dn_in_var, ranging.col_bound_dn.in_var_.data(),
num_col * sizeof(HighsInt));
if (col_bound_dn_ou_var)
memcpy(col_bound_dn_ou_var, ranging.col_bound_dn.ou_var_.data(),
num_col * sizeof(HighsInt));

if (row_bound_up_value)
memcpy(row_bound_up_value, ranging.row_bound_up.value_.data(),
num_row * sizeof(double));
if (row_bound_up_objective)
memcpy(row_bound_up_objective, ranging.row_bound_up.objective_.data(),
num_row * sizeof(double));
if (row_bound_up_in_var)
memcpy(row_bound_up_in_var, ranging.row_bound_up.in_var_.data(),
num_row * sizeof(HighsInt));
if (row_bound_up_ou_var)
memcpy(row_bound_up_ou_var, ranging.row_bound_up.ou_var_.data(),
num_row * sizeof(HighsInt));

if (row_bound_dn_value)
memcpy(row_bound_dn_value, ranging.row_bound_dn.value_.data(),
num_row * sizeof(double));
if (row_bound_dn_objective)
memcpy(row_bound_dn_objective, ranging.row_bound_dn.objective_.data(),
num_row * sizeof(double));
if (row_bound_dn_in_var)
memcpy(row_bound_dn_in_var, ranging.row_bound_dn.in_var_.data(),
num_row * sizeof(HighsInt));
if (row_bound_dn_ou_var)
memcpy(row_bound_dn_ou_var, ranging.row_bound_dn.ou_var_.data(),
num_row * sizeof(HighsInt));

return status;
}
Expand Down
2 changes: 2 additions & 0 deletions src/interfaces/highs_c_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1835,6 +1835,8 @@ HighsInt Highs_crossover(void* highs, const int num_col, const int num_row,
* active bound. For basic variables the ranging information relates
* to...
*
* For any values that are not required, pass NULL.
*
* @param highs A pointer to the Highs instance.
* @param col_cost_up_value The upper range of the cost value
* @param col_cost_up_objective The objective at the upper cost range
Expand Down

0 comments on commit 48ada68

Please sign in to comment.