MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / sharedReader

Method sharedReader

Telegram/SourceFiles/data/data_streaming.cpp:91–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89
90template <typename Data>
91[[nodiscard]] std::shared_ptr<Streaming::Reader> Streaming::sharedReader(
92 base::flat_map<not_null<Data*>, std::weak_ptr<Reader>> &readers,
93 not_null<Data*> data,
94 FileOrigin origin,
95 bool forceRemoteLoader) {
96 const auto i = readers.find(data);
97 if (i != end(readers)) {
98 if (auto result = i->second.lock()) {
99 if (!forceRemoteLoader || result->isRemoteLoader()) {
100 return result;
101 }
102 }
103 }
104 auto loader = data->createStreamingLoader(origin, forceRemoteLoader);
105 if (!loader) {
106 return nullptr;
107 }
108 auto result = std::make_shared<Reader>(
109 std::move(loader),
110 &_owner->cacheBigFile());
111 if (!PruneDestroyedAndSet(readers, data, result)) {
112 readers.emplace_or_assign(data, result);
113 }
114 return result;
115
116}
117
118template <typename Data>
119[[nodiscard]] std::shared_ptr<Streaming::Document> Streaming::sharedDocument(

Callers 1

saveMethod · 0.80

Calls 5

PruneDestroyedAndSetFunction · 0.85
findMethod · 0.45
lockMethod · 0.45
isRemoteLoaderMethod · 0.45
createStreamingLoaderMethod · 0.45

Tested by

no test coverage detected