51 using Size = uint32_t;
57 Size size_, capacity_;
60 Bindings(Size capacity) : size_(0), capacity_(capacity) { }
64 Size size()
const {
return size_; }
66 bool empty()
const {
return !size_; }
70 void push_back(
const Attr & attr)
72 assert(size_ < capacity_);
73 attrs[size_++] = attr;
79 iterator i = std::lower_bound(begin(), end(), key);
80 if (i != end() && i->name == name)
return i;
87 iterator i = std::lower_bound(begin(), end(), key);
88 if (i != end() && i->name == name)
return &*i;
92 iterator begin() {
return &attrs[0]; }
93 iterator end() {
return &attrs[size_]; }
95 Attr & operator[](Size pos)
102 Size capacity() {
return capacity_; }
109 std::vector<const Attr *> res;
111 for (Size n = 0; n < size_; n++)
112 res.emplace_back(&attrs[n]);
113 std::sort(res.begin(), res.end(), [&](
const Attr * a,
const Attr * b) {
114 std::string_view sa = symbols[a->name], sb = symbols[b->name];