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

Function StructValueEqual

common/values/struct_value.cc:217–265  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

215namespace common_internal {
216
217absl::Status StructValueEqual(
218 const StructValue& lhs, const StructValue& rhs,
219 const google::protobuf::DescriptorPool* absl_nonnull descriptor_pool,
220 google::protobuf::MessageFactory* absl_nonnull message_factory,
221 google::protobuf::Arena* absl_nonnull arena, Value* absl_nonnull result) {
222 ABSL_DCHECK(descriptor_pool != nullptr);
223 ABSL_DCHECK(message_factory != nullptr);
224 ABSL_DCHECK(arena != nullptr);
225 ABSL_DCHECK(result != nullptr);
226
227 if (lhs.GetTypeName() != rhs.GetTypeName()) {
228 *result = FalseValue();
229 return absl::OkStatus();
230 }
231 absl::flat_hash_map<std::string, Value> lhs_fields;
232 CEL_RETURN_IF_ERROR(lhs.ForEachField(
233 [&lhs_fields](absl::string_view name,
234 const Value& lhs_value) -> absl::StatusOr<bool> {
235 lhs_fields.insert_or_assign(std::string(name), Value(lhs_value));
236 return true;
237 },
238 descriptor_pool, message_factory, arena));
239 bool equal = true;
240 size_t rhs_fields_count = 0;
241 CEL_RETURN_IF_ERROR(rhs.ForEachField(
242 [&](absl::string_view name,
243 const Value& rhs_value) -> absl::StatusOr<bool> {
244 auto lhs_field = lhs_fields.find(name);
245 if (lhs_field == lhs_fields.end()) {
246 equal = false;
247 return false;
248 }
249 CEL_RETURN_IF_ERROR(lhs_field->second.Equal(
250 rhs_value, descriptor_pool, message_factory, arena, result));
251 if (result->IsFalse()) {
252 equal = false;
253 return false;
254 }
255 ++rhs_fields_count;
256 return true;
257 },
258 descriptor_pool, message_factory, arena));
259 if (!equal || rhs_fields_count != lhs_fields.size()) {
260 *result = FalseValue();
261 return absl::OkStatus();
262 }
263 *result = TrueValue();
264 return absl::OkStatus();
265}
266
267absl::Status StructValueEqual(
268 const CustomStructValueInterface& lhs, const StructValue& rhs,

Callers 3

EqualMethod · 0.85
EqualMethod · 0.85
EqualMethod · 0.85

Calls 9

FalseValueFunction · 0.85
TrueValueFunction · 0.85
IsFalseMethod · 0.80
ValueClass · 0.70
GetTypeNameMethod · 0.45
ForEachFieldMethod · 0.45
endMethod · 0.45
EqualMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected