OR-Tools
8.1
status.h
Go to the documentation of this file.
1
// Copyright 2010-2018 Google LLC
2
// Licensed under the Apache License, Version 2.0 (the "License");
3
// you may not use this file except in compliance with the License.
4
// You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software
9
// distributed under the License is distributed on an "AS IS" BASIS,
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
// See the License for the specific language governing permissions and
12
// limitations under the License.
13
14
#ifndef OR_TOOLS_GLOP_STATUS_H_
15
#define OR_TOOLS_GLOP_STATUS_H_
16
17
#include <string>
18
19
namespace
operations_research
{
20
namespace
glop {
21
22
// Return type for the solver functions that return "Did that work?".
23
// It should only be used for unrecoverable errors.
24
class
Status
{
25
public
:
26
// Possible kinds of errors.
27
enum
ErrorCode
{
28
// Not an error. Returned on success.
29
GLOP_OK
= 0,
30
31
// The LU factorization of the current basis couldn't be computed.
32
ERROR_LU
= 1,
33
34
// The current variable values are out of their bound modulo the tolerance.
35
ERROR_BOUND
= 2,
36
37
// A pointer argument was NULL when it shouldn't be.
38
ERROR_NULL
= 3,
39
40
// The linear program is invalid or it does not have the required format.
41
ERROR_INVALID_PROBLEM
= 4,
42
43
};
44
45
// Creates a "successful" status.
46
Status
();
47
48
// Creates a status with the specified error code and error message.
49
// If "code == 0", error_message is ignored and a Status object identical
50
// to Status::OK is constructed.
51
Status
(
ErrorCode
error_code
, std::string
error_message
);
52
53
// Improves readability but identical to 0-arg constructor.
54
static
const
Status
OK
() {
return
Status
(); }
55
56
// Accessors.
57
ErrorCode
error_code
()
const
{
return
error_code_; }
58
const
std::string&
error_message
()
const
{
return
error_message_; }
59
bool
ok
()
const
{
return
error_code_ ==
GLOP_OK
; }
60
61
private
:
62
ErrorCode
error_code_;
63
std::string error_message_;
64
};
65
66
// Returns the string representation of the ErrorCode enum.
67
std::string
GetErrorCodeString
(
Status::ErrorCode
error_code);
68
69
// Macro to simplify error propagation between function returning Status.
70
#define GLOP_RETURN_IF_ERROR(function_call) \
71
do { \
72
Status return_status = function_call; \
73
if (!return_status.ok()) return return_status; \
74
} while (false)
75
76
// Macro to simplify the creation of an error.
77
#define GLOP_RETURN_AND_LOG_ERROR(error_code, message) \
78
do { \
79
std::string error_message = message; \
80
LOG(ERROR) << GetErrorCodeString(error_code) << ": " << error_message; \
81
return Status(error_code, error_message); \
82
} while (false)
83
84
// Macro to check that a pointer argument is not null.
85
#define GLOP_RETURN_ERROR_IF_NULL(arg) \
86
if (arg == nullptr) { \
87
const std::string variable_name = #arg; \
88
std::string error_message = variable_name + " must not be null."; \
89
LOG(DFATAL) << error_message; \
90
return Status(Status::ERROR_NULL, error_message); \
91
}
92
93
}
// namespace glop
94
}
// namespace operations_research
95
96
#endif // OR_TOOLS_GLOP_STATUS_H_
operations_research::glop::Status::GLOP_OK
@ GLOP_OK
Definition:
status.h:29
operations_research::glop::Status::ERROR_INVALID_PROBLEM
@ ERROR_INVALID_PROBLEM
Definition:
status.h:41
operations_research::glop::Status
Definition:
status.h:24
operations_research
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
Definition:
dense_doubly_linked_list.h:21
operations_research::glop::GetErrorCodeString
std::string GetErrorCodeString(Status::ErrorCode error_code)
Definition:
status.cc:29
operations_research::glop::Status::OK
static const Status OK()
Definition:
status.h:54
operations_research::glop::Status::error_code
ErrorCode error_code() const
Definition:
status.h:57
operations_research::glop::Status::ERROR_LU
@ ERROR_LU
Definition:
status.h:32
operations_research::glop::Status::Status
Status()
Definition:
status.cc:23
operations_research::glop::Status::ERROR_BOUND
@ ERROR_BOUND
Definition:
status.h:35
operations_research::glop::Status::error_message
const std::string & error_message() const
Definition:
status.h:58
operations_research::glop::Status::ErrorCode
ErrorCode
Definition:
status.h:27
operations_research::glop::Status::ok
bool ok() const
Definition:
status.h:59
operations_research::glop::Status::ERROR_NULL
@ ERROR_NULL
Definition:
status.h:38
ortools
glop
status.h
Generated by
1.8.20