Skip to content

Commit afc4115

Browse files
authored
Refactor a few utils / graph files, modernize hashing, expand constraint solver python bindings. (#5002)
* Refactor a few utils / graph files, modernize hashing, expand constraint solver python bindings. * Also remove `aligned_memory` and `string_util`
1 parent 1c805fe commit afc4115

26 files changed

+3275
-1050
lines changed

ortools/constraint_solver/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ cc_library(
222222
"@abseil-cpp//absl/container:flat_hash_map",
223223
"@abseil-cpp//absl/container:flat_hash_set",
224224
"@abseil-cpp//absl/flags:flag",
225+
"@abseil-cpp//absl/hash",
225226
"@abseil-cpp//absl/log",
226227
"@abseil-cpp//absl/log:check",
227228
"@abseil-cpp//absl/log:vlog_is_on",

ortools/constraint_solver/constraint_solver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3109,8 +3109,8 @@ class Solver {
31093109
void set_fail_intercept(std::function<void()> fail_intercept) {
31103110
fail_intercept_ = std::move(fail_intercept);
31113111
}
3112-
#endif // !defined(SWIG)
31133112
void clear_fail_intercept() { fail_intercept_ = nullptr; }
3113+
#endif // !defined(SWIG)
31143114
/// Access to demon profiler.
31153115
DemonProfiler* demon_profiler() const { return demon_profiler_; }
31163116
// TODO(user): Get rid of the following methods once fast local search is

ortools/constraint_solver/demon_profiler.cc

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,20 @@
1313

1414
#include <algorithm>
1515
#include <cmath>
16-
#include <cstddef>
1716
#include <cstdint>
1817
#include <string>
19-
#include <utility>
2018
#include <vector>
2119

22-
#include "absl/container/flat_hash_map.h"
2320
#include "absl/status/status.h"
2421
#include "absl/strings/str_format.h"
2522
#include "absl/strings/string_view.h"
2623
#include "absl/time/clock.h"
2724
#include "absl/time/time.h"
2825
#include "ortools/base/file.h"
29-
#include "ortools/base/hash.h"
3026
#include "ortools/base/helpers.h"
31-
#include "ortools/base/logging.h"
3227
#include "ortools/base/mathutil.h"
28+
#include "ortools/base/options.h"
3329
#include "ortools/base/stl_util.h"
34-
#include "ortools/base/types.h"
3530
#include "ortools/constraint_solver/constraint_solver.h"
3631
#include "ortools/constraint_solver/constraint_solveri.h"
3732
#include "ortools/constraint_solver/demon_profiler.pb.h"

ortools/constraint_solver/diffn.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,16 @@
1717
#include <string>
1818
#include <vector>
1919

20+
#include "absl/log/check.h"
2021
#include "absl/strings/str_format.h"
2122
#include "absl/types/span.h"
22-
#include "ortools/base/hash.h"
2323
#include "ortools/base/int_type.h"
24-
#include "ortools/base/logging.h"
25-
#include "ortools/base/types.h"
2624
#include "ortools/constraint_solver/constraint_solver.h"
2725
#include "ortools/constraint_solver/constraint_solveri.h"
2826
#include "ortools/util/string_array.h"
2927

3028
namespace operations_research {
31-
// Diffn constraint, Non overlapping boxs.
29+
// Diffn constraint, Non overlapping boxes.
3230
namespace {
3331
DEFINE_INT_TYPE(Box, int);
3432
class Diffn : public Constraint {

ortools/constraint_solver/model_cache.cc

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
// limitations under the License.
1313

1414
#include <cstdint>
15-
#include <string>
1615
#include <vector>
1716

18-
#include "ortools/base/commandlineflags.h"
19-
#include "ortools/base/logging.h"
17+
#include "absl/flags/declare.h"
18+
#include "absl/flags/flag.h"
19+
#include "absl/hash/hash.h"
20+
#include "absl/log/check.h"
2021
#include "ortools/base/stl_util.h"
21-
#include "ortools/base/types.h"
2222
#include "ortools/constraint_solver/constraint_solver.h"
2323
#include "ortools/constraint_solver/constraint_solveri.h"
2424

@@ -55,33 +55,6 @@ bool IsEqual(const std::vector<T*>& a1, const std::vector<T*>& a2) {
5555
return true;
5656
}
5757

58-
template <class A1, class A2>
59-
uint64_t Hash2(const A1& a1, const A2& a2) {
60-
uint64_t a = Hash1(a1);
61-
uint64_t b = uint64_t{0xe08c1d668b756f82}; // more of the golden ratio
62-
uint64_t c = Hash1(a2);
63-
mix(a, b, c);
64-
return c;
65-
}
66-
67-
template <class A1, class A2, class A3>
68-
uint64_t Hash3(const A1& a1, const A2& a2, const A3& a3) {
69-
uint64_t a = Hash1(a1);
70-
uint64_t b = Hash1(a2);
71-
uint64_t c = Hash1(a3);
72-
mix(a, b, c);
73-
return c;
74-
}
75-
76-
template <class A1, class A2, class A3, class A4>
77-
uint64_t Hash4(const A1& a1, const A2& a2, const A3& a3, const A4& a4) {
78-
uint64_t a = Hash1(a1);
79-
uint64_t b = Hash1(a2);
80-
uint64_t c = Hash2(a3, a4);
81-
mix(a, b, c);
82-
return c;
83-
}
84-
8558
template <class C>
8659
void Double(C*** array_ptr, int* size_ptr) {
8760
DCHECK(array_ptr != nullptr);
@@ -229,7 +202,7 @@ class Cache2 {
229202
}
230203

231204
C* Find(const A1& a1, const A2& a2) const {
232-
uint64_t code = Hash2(a1, a2) % size_;
205+
uint64_t code = absl::HashOf(a1, a2) % size_;
233206
Cell* tmp = array_[code];
234207
while (tmp) {
235208
C* const result = tmp->ReturnsIfEqual(a1, a2);
@@ -242,7 +215,7 @@ class Cache2 {
242215
}
243216

244217
void UnsafeInsert(const A1& a1, const A2& a2, C* const c) {
245-
const int position = Hash2(a1, a2) % size_;
218+
const int position = absl::HashOf(a1, a2) % size_;
246219
Cell* const cell = new Cell(a1, a2, c, array_[position]);
247220
array_[position] = cell;
248221
if (++num_items_ > 2 * size_) {
@@ -263,7 +236,7 @@ class Cache2 {
263236
return nullptr;
264237
}
265238

266-
uint64_t Hash() const { return Hash2(a1_, a2_); }
239+
uint64_t Hash() const { return absl::HashOf(a1_, a2_); }
267240

268241
void set_next(Cell* const next) { next_ = next; }
269242

@@ -318,7 +291,7 @@ class Cache3 {
318291
}
319292

320293
C* Find(const A1& a1, const A2& a2, const A3& a3) const {
321-
uint64_t code = Hash3(a1, a2, a3) % size_;
294+
uint64_t code = absl::HashOf(a1, a2, a3) % size_;
322295
Cell* tmp = array_[code];
323296
while (tmp) {
324297
C* const result = tmp->ReturnsIfEqual(a1, a2, a3);
@@ -331,7 +304,7 @@ class Cache3 {
331304
}
332305

333306
void UnsafeInsert(const A1& a1, const A2& a2, const A3& a3, C* const c) {
334-
const int position = Hash3(a1, a2, a3) % size_;
307+
const int position = absl::HashOf(a1, a2, a3) % size_;
335308
Cell* const cell = new Cell(a1, a2, a3, c, array_[position]);
336309
array_[position] = cell;
337310
if (++num_items_ > 2 * size_) {
@@ -353,7 +326,7 @@ class Cache3 {
353326
return nullptr;
354327
}
355328

356-
uint64_t Hash() const { return Hash3(a1_, a2_, a3_); }
329+
uint64_t Hash() const { return absl::HashOf(a1_, a2_, a3_); }
357330

358331
void set_next(Cell* const next) { next_ = next; }
359332

0 commit comments

Comments
 (0)