Files
ortools-clone/ortools/constraint_solver/csharp/routing.i

210 lines
7.7 KiB
OpenEdge ABL

// Copyright 2010-2018 Google LLC
// Licensed 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.
// TODO(user): Refactor this file to adhere to the SWIG style guide.
%include "std_pair.i"
%template(IntBoolPair) std::pair<int, bool>;
%include "ortools/constraint_solver/csharp/constraint_solver.i"
%include "ortools/constraint_solver/csharp/routing_types.i"
%include "ortools/constraint_solver/csharp/routing_index_manager.i"
// We need to forward-declare the proto here, so that PROTO_INPUT involving it
// works correctly. The order matters very much: this declaration needs to be
// before the %{ #include ".../routing.h" %}.
namespace operations_research {
class RoutingModelParameters;
class RoutingSearchParameters;
} // namespace operations_research
// Include the file we want to wrap a first time.
%{
#include "ortools/constraint_solver/routing.h"
#include "ortools/constraint_solver/routing_index_manager.h"
#include "ortools/constraint_solver/routing_parameters.h"
#include "ortools/constraint_solver/routing_parameters.pb.h"
#include "ortools/constraint_solver/routing_types.h"
%}
%module(directors="1") operations_research;
// RoutingModel methods.
DEFINE_INDEX_TYPE_TYPEDEF(
operations_research::RoutingCostClassIndex,
operations_research::RoutingModel::CostClassIndex);
DEFINE_INDEX_TYPE_TYPEDEF(
operations_research::RoutingDimensionIndex,
operations_research::RoutingModel::DimensionIndex);
DEFINE_INDEX_TYPE_TYPEDEF(
operations_research::RoutingDisjunctionIndex,
operations_research::RoutingModel::DisjunctionIndex);
DEFINE_INDEX_TYPE_TYPEDEF(
operations_research::RoutingVehicleClassIndex,
operations_research::RoutingModel::VehicleClassIndex);
namespace operations_research {
// RoutingModel
%unignore RoutingModel;
%typemap(cscode) RoutingModel %{
// Keep reference to delegate to avoid GC to collect them early.
private List<LongToLong> unaryTransitCallbacks;
private LongToLong StoreLongToLong(LongToLong c) {
if (unaryTransitCallbacks == null)
unaryTransitCallbacks = new List<LongToLong>();
unaryTransitCallbacks.Add(c);
return c;
}
private List<LongLongToLong> transitCallbacks;
private LongLongToLong StoreLongLongToLong(LongLongToLong c) {
if (transitCallbacks == null)
transitCallbacks = new List<LongLongToLong>();
transitCallbacks.Add(c);
return c;
}
private List<VoidToVoid> solutionCallbacks;
private VoidToVoid StoreVoidToVoid(VoidToVoid c) {
if (solutionCallbacks == null)
solutionCallbacks = new List<VoidToVoid>();
solutionCallbacks.Add(c);
return c;
}
%}
// Ignored:
%ignore RoutingModel::AddDimensionDependentDimensionWithVehicleCapacity;
%ignore RoutingModel::RegisterUnaryTransitVector(
std::vector<int64> values);
%ignore RoutingModel::RegisterTransitMatrix(
std::vector<std::vector<int64> > values);
%ignore RoutingModel::AddVectorDimension(
std::vector<int64> values,
int64 capacity,
bool fix_start_cumul_to_zero,
const std::string& name);
%ignore RoutingModel::AddMatrixDimension(
std::vector<std::vector<int64> > values,
int64 capacity,
bool fix_start_cumul_to_zero,
const std::string& name);
%extend RoutingModel {
int RegisterUnaryTransitVector(
const std::vector<int64>& values) {
return $self->RegisterUnaryTransitVector(values);
}
int RegisterTransitMatrix(
const std::vector<std::vector<int64> >& values) {
return $self->RegisterTransitMatrix(values);
}
std::pair<int, bool> AddVectorDimension(
const std::vector<int64>& values,
int64 capacity,
bool fix_start_cumul_to_zero,
const std::string& name) {
return $self->AddVectorDimension(values, capacity, fix_start_cumul_to_zero, name);
}
std::pair<int, bool> AddMatrixDimension(
const std::vector<std::vector<int64> >& values,
int64 capacity,
bool fix_start_cumul_to_zero,
const std::string& name) {
return $self->AddMatrixDimension(values, capacity, fix_start_cumul_to_zero, name);
}
}
%ignore RoutingModel::AddSameVehicleRequiredTypeAlternatives;
%ignore RoutingModel::GetAllDimensionNames;
%ignore RoutingModel::GetAutomaticFirstSolutionStrategy;
%ignore RoutingModel::GetDeliveryIndexPairs;
%ignore RoutingModel::GetDimensions;
%ignore RoutingModel::GetDimensionsWithSoftAndSpanCosts;
%ignore RoutingModel::GetDimensionsWithSoftOrSpanCosts;
%ignore RoutingModel::GetGlobalDimensionCumulOptimizers;
%ignore RoutingModel::GetHardTypeIncompatibilitiesOfType;
%ignore RoutingModel::GetLocalDimensionCumulMPOptimizers;
%ignore RoutingModel::GetLocalDimensionCumulOptimizers;
%ignore RoutingModel::GetMutableGlobalCumulOptimizer;
%ignore RoutingModel::GetMutableLocalCumulOptimizer;
%ignore RoutingModel::GetMutableLocalCumulMPOptimizer;
%ignore RoutingModel::GetPerfectBinaryDisjunctions;
%ignore RoutingModel::GetPickupIndexPairs;
%ignore RoutingModel::HasTypeRegulations;
%ignore RoutingModel::MakeStateDependentTransit;
%ignore RoutingModel::PackCumulsOfOptimizerDimensionsFromAssignment;
%ignore RoutingModel::RegisterStateDependentTransitCallback;
%ignore RoutingModel::RemainingTime;
%ignore RoutingModel::StateDependentTransitCallback;
%ignore RoutingModel::SolveWithParameters(
const RoutingSearchParameters& search_parameters,
std::vector<const Assignment*>* solutions);
%ignore RoutingModel::SolveFromAssignmentWithParameters(
const Assignment* assignment,
const RoutingSearchParameters& search_parameters,
std::vector<const Assignment*>* solutions);
%ignore RoutingModel::TransitCallback;
%ignore RoutingModel::UnaryTransitCallbackOrNull;
// RoutingDimension
%unignore RoutingDimension;
%typemap(cscode) RoutingDimension %{
// Keep reference to delegate to avoid GC to collect them early.
private List<IntIntToLong> limitCallbacks;
private IntIntToLong StoreIntIntToLong(IntIntToLong limit) {
if (limitCallbacks == null)
limitCallbacks = new List<IntIntToLong>();
limitCallbacks.Add(limit);
return limit;
}
private List<LongLongToLong> groupDelayCallbacks;
private LongLongToLong StoreLongLongToLong(LongLongToLong groupDelay) {
if (groupDelayCallbacks == null)
groupDelayCallbacks = new List<LongLongToLong>();
groupDelayCallbacks.Add(groupDelay);
return groupDelay;
}
%}
%ignore RoutingDimension::GetBreakDistanceDurationOfVehicle;
// TypeRegulationsChecker
%unignore TypeRegulationsChecker;
%ignore TypeRegulationsChecker::CheckVehicle;
} // namespace operations_research
%rename("GetStatus") operations_research::RoutingModel::status;
%rename("%(camelcase)s", %$isfunction) "";
// Protobuf support
PROTO_INPUT(operations_research::RoutingSearchParameters,
Google.OrTools.ConstraintSolver.RoutingSearchParameters,
search_parameters)
PROTO_INPUT(operations_research::RoutingModelParameters,
Google.OrTools.ConstraintSolver.RoutingModelParameters,
parameters)
PROTO2_RETURN(operations_research::RoutingSearchParameters,
Google.OrTools.ConstraintSolver.RoutingSearchParameters)
PROTO2_RETURN(operations_research::RoutingModelParameters,
Google.OrTools.ConstraintSolver.RoutingModelParameters)
// TODO(user): Replace with %ignoreall/%unignoreall
//swiglint: disable include-h-allglobals
%include "ortools/constraint_solver/routing_parameters.h"
%include "ortools/constraint_solver/routing.h"