MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / Reserve

Method Reserve

eval/eval/evaluator_stack.cc:28–90  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

26}
27
28void EvaluatorStack::Reserve(size_t size) {
29 static_assert(alignof(cel::Value) <= __STDCPP_DEFAULT_NEW_ALIGNMENT__);
30 static_assert(alignof(AttributeTrail) <= __STDCPP_DEFAULT_NEW_ALIGNMENT__);
31
32 if (max_size_ >= size) {
33 return;
34 }
35
36 void* absl_nullability_unknown data = cel::internal::New(SizeBytes(size));
37
38 cel::Value* absl_nullability_unknown values_begin =
39 reinterpret_cast<cel::Value*>(data);
40 cel::Value* absl_nullability_unknown values = values_begin;
41
42 AttributeTrail* absl_nullability_unknown attributes_begin =
43 reinterpret_cast<AttributeTrail*>(reinterpret_cast<uint8_t*>(data) +
44 AttributesBytesOffset(size));
45 AttributeTrail* absl_nullability_unknown attributes = attributes_begin;
46
47 if (max_size_ > 0) {
48 const size_t n = this->size();
49 const size_t m = std::min(n, size);
50
51 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(values_begin, values_begin + size,
52 values_begin + size, values + m);
53 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(attributes_begin,
54 attributes_begin + size,
55 attributes_begin + size, attributes + m);
56
57 for (size_t i = 0; i < m; ++i) {
58 ::new (static_cast<void*>(values++))
59 cel::Value(std::move(values_begin_[i]));
60 ::new (static_cast<void*>(attributes++))
61 AttributeTrail(std::move(attributes_begin_[i]));
62 }
63 std::destroy_n(values_begin_, n);
64 std::destroy_n(attributes_begin_, n);
65
66 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(values_begin_, values_begin_ + max_size_,
67 values_, values_begin_ + max_size_);
68 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(
69 attributes_begin_, attributes_begin_ + max_size_, attributes_,
70 attributes_begin_ + max_size_);
71
72 cel::internal::SizedDelete(data_, SizeBytes(max_size_));
73 } else {
74 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(values_begin, values_begin + size,
75 values_begin + size, values);
76 ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(attributes_begin,
77 attributes_begin + size,
78 attributes_begin + size, attributes);
79 }
80
81 values_ = values;
82 values_begin_ = values_begin;
83 values_end_ = values_begin + size;
84
85 attributes_ = attributes;

Callers 15

DoEvaluateMethod · 0.45
EvaluateMethod · 0.45
DoEvaluateMethod · 0.45
EvaluateMethod · 0.45
ASSERT_OK_AND_ASSIGNFunction · 0.45
BM_Comprehension_TraceFunction · 0.45
BM_ListComprehensionFunction · 0.45
BM_ListComprehension_OptFunction · 0.45

Calls 3

sizeMethod · 0.95
NewFunction · 0.85
SizedDeleteFunction · 0.85

Tested by 10

ASSERT_OK_AND_ASSIGNFunction · 0.36
BM_Comprehension_TraceFunction · 0.36
BM_ListComprehensionFunction · 0.36
BM_ListComprehension_OptFunction · 0.36
RegisterModernListsFunction · 0.36