/
ne1ghost
/
nix
Обзор
Документация
Войти
/
ne1ghost
/
nix
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/libexpr/attr-set.cc
53 строки
1 KB
Eelco Dolstra
Never update values after setting the type
25 мар 2024, 21:21
25 мар 2024, 21:21
8c0590f
Код
Авторство
О чём код?
#include "attr-set.hh" #include "eval-inline.hh" #include <algorithm> namespace nix { /* Allocate a new array of attributes for an attribute set with a specific capacity. The space is implicitly reserved after the Bindings structure. */ Bindings * EvalState::allocBindings(size_t capacity) { if (capacity == 0) return &emptyBindings; if (capacity > std::numeric_limits<Bindings::size_t>::max()) throw Error("attribute set of size %d is too big", capacity); nrAttrsets++; nrAttrsInAttrsets += capacity; return new (allocBytes(sizeof(Bindings) + sizeof(Attr) * capacity)) Bindings((Bindings::size_t) capacity); } Value & BindingsBuilder::alloc(Symbol name, PosIdx pos) { auto value = state.allocValue(); bindings->push_back(Attr(name, value, pos)); return *value; } Value & BindingsBuilder::alloc(std::string_view name, PosIdx pos) { return alloc(state.symbols.create(name), pos); } void Bindings::sort() { if (size_) std::sort(begin(), end()); } Value & Value::mkAttrs(BindingsBuilder & bindings) { mkAttrs(bindings.finish()); return *this; } }