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

Method MutableMessageFactory

runtime/internal/runtime_env.cc:36–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

34}
35
36google::protobuf::MessageFactory* absl_nonnull RuntimeEnv::MutableMessageFactory() const {
37 google::protobuf::MessageFactory* absl_nullable shared_message_factory =
38 message_factory_ptr.load(std::memory_order_relaxed);
39 if (shared_message_factory != nullptr) {
40 return shared_message_factory;
41 }
42 absl::MutexLock lock(message_factory_mutex);
43 shared_message_factory = message_factory_ptr.load(std::memory_order_relaxed);
44 if (shared_message_factory == nullptr) {
45 if (descriptor_pool.get() == google::protobuf::DescriptorPool::generated_pool()) {
46 // Using the generated descriptor pool, just use the generated message
47 // factory.
48 message_factory = std::shared_ptr<google::protobuf::MessageFactory>(
49 google::protobuf::MessageFactory::generated_factory(),
50 internal::NoopDeleteFor<google::protobuf::MessageFactory>());
51 } else {
52 auto dynamic_message_factory =
53 std::make_shared<google::protobuf::DynamicMessageFactory>();
54 // Ensure we do not delegate to the generated factory, if the default
55 // every changes. We prefer being hermetic.
56 dynamic_message_factory->SetDelegateToGeneratedFactory(false);
57 message_factory = std::move(dynamic_message_factory);
58 }
59 shared_message_factory = message_factory.get();
60 message_factory_ptr.store(shared_message_factory,
61 std::memory_order_seq_cst);
62 }
63 return shared_message_factory;
64}
65
66void RuntimeEnv::KeepAlive(std::shared_ptr<const void> keep_alive) {
67 if (keep_alive == nullptr) {

Callers 3

TraceImplMethod · 0.45
TraceImplMethod · 0.45
GetMessageFactoryMethod · 0.45

Calls 1

getMethod · 0.45

Tested by

no test coverage detected