20 #include "absl/container/flat_hash_map.h"
21 #include "absl/status/status.h"
22 #include "absl/strings/str_cat.h"
23 #include "absl/strings/string_view.h"
24 #include "absl/types/span.h"
36 const bool check_unique) {
37 if (name_vector.
values().empty()) {
39 return absl::OkStatus();
42 absl::flat_hash_map<absl::string_view, int64_t> used_variable_names;
44 for (
const auto [
id, name_pointer] : name_vector) {
45 const std::string&
name = *name_pointer;
48 return absl::InvalidArgumentError(
49 absl::StrCat(
"Found name: ",
name,
" twice, for ids ",
id,
50 " and ", used_variable_names.at(
name)));
55 return absl::OkStatus();
61 if (old_names.
Empty()) {
62 return absl::OkStatus();
64 for (
const auto [
id, name_pointer] : new_names) {
65 const std::string& new_name = *name_pointer;
66 if (!new_name.empty() && old_names.
HasName(new_name)) {
67 return absl::InvalidArgumentError(
68 absl::StrCat(
"Found name: ", new_name,
" twice, for ids ",
id,
72 return absl::OkStatus();
bool HasName(absl::string_view name) const
const absl::flat_hash_map< absl::string_view, int64_t > & nonempty_name_to_id() const
absl::Span< const T > values() const
bool InsertIfNotPresent(Collection *const collection, const typename Collection::value_type &value)
absl::Status CheckIdsAndValuesSize(const SparseVectorView< T > &vector_view, absl::string_view value_name="values")
absl::Status CheckNewNames(const IdNameBiMap &old_names, const SparseVectorView< const std::string * > &new_names)
absl::Status CheckNameVector(const SparseVectorView< const std::string * > &name_vector, const bool check_unique)
Collection of objects used to extend the Constraint Solver library.
#define RETURN_IF_ERROR(expr)