14#ifndef OR_TOOLS_MATH_OPT_CORE_MODEL_SUMMARY_H_
15#define OR_TOOLS_MATH_OPT_CORE_MODEL_SUMMARY_H_
18#include <initializer_list>
23#include "absl/container/flat_hash_map.h"
24#include "absl/strings/string_view.h"
48 IdNameBiMap(std::initializer_list<std::pair<int64_t, absl::string_view>> ids);
53 inline void Insert(int64_t
id, std::string
name);
56 inline void Erase(int64_t
id);
58 inline bool HasId(int64_t
id)
const;
60 inline bool Empty()
const;
61 inline int Size()
const;
81 return nonempty_name_to_id_;
86 int64_t next_free_id_ = 0;
91 absl::flat_hash_map<absl::string_view, int64_t> nonempty_name_to_id_;
106 next_free_id_ =
id + 1;
108 const auto [it, success] = id_to_name_.
emplace(
id, std::move(
name));
109 CHECK(success) <<
"id: " << id;
110 const absl::string_view name_view(it->second);
111 if (!name_view.empty()) {
117 const auto it = id_to_name_.
find(
id);
118 CHECK(it != id_to_name_.
end()) << id;
119 const absl::string_view name_view(it->second);
120 if (!name_view.empty()) {
121 CHECK_EQ(1, nonempty_name_to_id_.erase(name_view))
122 <<
"name: " << name_view <<
" id: " << id;
124 id_to_name_.
erase(it);
131 return nonempty_name_to_id_.contains(
name);
142 const int64_t largest_id = id_to_name_.
back().first;
143 CHECK_GT(new_next_free_id, largest_id);
147 next_free_id_ = new_next_free_id;
#define CHECK_LT(val1, val2)
#define CHECK_EQ(val1, val2)
#define CHECK_GE(val1, val2)
#define CHECK_GT(val1, val2)
bool contains(const key_arg< K > &key) const
iterator find(const key_arg< K > &key)
size_type erase(const key_arg< K > &key)
std::pair< iterator, bool > emplace(Args &&... args)
bool HasName(absl::string_view name) const
int64_t next_free_id() const
bool HasId(int64_t id) const
const gtl::linked_hash_map< int64_t, std::string > & id_to_name() const
void SetNextFreeId(int64_t new_next_free_id)
void Insert(int64_t id, std::string name)
const absl::flat_hash_map< absl::string_view, int64_t > & nonempty_name_to_id() const
void InsertOrDie(Collection *const collection, const typename Collection::value_type &value)
Collection of objects used to extend the Constraint Solver library.
IdNameBiMap linear_constraints