28 : name(name), pos(pos), value(value) { };
30 auto operator <=> (
const Attr & a)
const
32 return name <=> a.name;
36static_assert(
sizeof(
Attr) == 2 *
sizeof(uint32_t) +
sizeof(
Value *),
37 "performance of the evaluator is highly sensitive to the size of Attr. "
38 "avoid introducing any padding into Attr if at all possible, and do not "
39 "introduce new fields that need not be present for almost every instance.");
50 typedef uint32_t size_t;
54 size_t size_, capacity_;
57 Bindings(
size_t capacity) : size_(0), capacity_(capacity) { }
58 Bindings(
const Bindings &
bindings) =
delete;
61 size_t size()
const {
return size_; }
63 bool empty()
const {
return !size_; }
65 typedef Attr * iterator;
67 typedef const Attr * const_iterator;
69 void push_back(
const Attr & attr)
71 assert(size_ < capacity_);
72 attrs[size_++] = attr;
78 const_iterator
i = std::lower_bound(begin(), end(),
key);
79 if (
i != end() &&
i->name ==
name)
return i;
86 const_iterator
i = std::lower_bound(begin(), end(),
key);
87 if (
i != end() &&
i->name ==
name)
return &*
i;
91 iterator begin() {
return &attrs[0]; }
92 iterator end() {
return &attrs[size_]; }
94 const_iterator begin()
const {
return &attrs[0]; }
95 const_iterator end()
const {
return &attrs[size_]; }
97 Attr & operator[](
size_t pos)
102 const Attr & operator[](
size_t pos)
const
109 size_t capacity()
const {
return capacity_; }
116 std::vector<const Attr *>
res;
118 for (
size_t n = 0; n < size_; n++)
119 res.emplace_back(&attrs[n]);
120 std::sort(
res.begin(),
res.end(), [&](
const Attr * a,
const Attr * b) {
121 std::string_view sa = symbols[a->name], sb = symbols[b->name];
141 using value_type =
Attr;
146 : bindings(bindings), state(state)
154 void insert(
const Attr & attr)
159 void push_back(
const Attr & attr)
161 bindings->push_back(attr);
181 return bindings->capacity();
186 for (
auto &
i : *bindings)
187 newBindings->push_back(
i);
188 bindings = newBindings;
191 friend struct ExprAttrs;
Definition attr-set.hh:48
friend class EvalState
Definition attr-set.hh:127
std::vector< const Attr * > lexicographicOrder(const SymbolTable &symbols) const
Definition attr-set.hh:114
Definition symbol-table.hh:82
Definition symbol-table.hh:58
const T::key_type & key
Definition lexer.l:2763
auto i
Definition lexer.l:2745
Strings res
Definition lexer.l:2566
const std::string_view & name
Definition lexer.l:1709
const T & value
Definition lexer.l:492
Bindings * bindings
Definition lexer.l:6423
std::unordered_map< std::string_view, std::pair< const std::string *, uint32_t > > symbols
Definition lexer.l:1010
Definition attr-set.hh:19