diff options
author | Alexey Bykov <alexei4203@yandex.ru> | 2022-02-10 16:47:16 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:16 +0300 |
commit | b50730a77e0c38f2fec0ad5d53fb2034d6470221 (patch) | |
tree | 9814fbd1c3effac9b8377c5d604b367b14e2db55 /library/cpp | |
parent | 4cadece7a57ab767e762a0bea1995a596aefeb11 (diff) | |
download | ydb-b50730a77e0c38f2fec0ad5d53fb2034d6470221.tar.gz |
Restoring authorship annotation for Alexey Bykov <alexei4203@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/codecs/codecs.h | 20 | ||||
-rw-r--r-- | library/cpp/codecs/zstd_dict_codec.cpp | 34 | ||||
-rw-r--r-- | library/cpp/codecs/zstd_dict_codec.h | 2 | ||||
-rw-r--r-- | library/cpp/containers/flat_hash/lib/containers.h | 34 | ||||
-rw-r--r-- | library/cpp/containers/flat_hash/ut/flat_hash_ut.cpp | 32 | ||||
-rw-r--r-- | library/cpp/http/server/http.cpp | 90 | ||||
-rw-r--r-- | library/cpp/http/server/http_ut.cpp | 80 | ||||
-rw-r--r-- | library/cpp/http/server/options.h | 6 | ||||
-rw-r--r-- | library/cpp/messagebus/config/ya.make | 26 | ||||
-rw-r--r-- | library/cpp/mime/types/mime.cpp | 6 | ||||
-rw-r--r-- | library/cpp/mime/types/mime.h | 2 | ||||
-rw-r--r-- | library/cpp/mime/ya.make | 2 | ||||
-rw-r--r-- | library/cpp/object_factory/object_factory.h | 24 |
13 files changed, 179 insertions, 179 deletions
diff --git a/library/cpp/codecs/codecs.h b/library/cpp/codecs/codecs.h index 2d8e56253e..cc5e72b285 100644 --- a/library/cpp/codecs/codecs.h +++ b/library/cpp/codecs/codecs.h @@ -76,11 +76,11 @@ namespace NCodecs { Trained = t; } - bool TryToLearn(ISequenceReader& r) { - Trained = DoTryToLearn(r); - return Trained; - } - + bool TryToLearn(ISequenceReader& r) { + Trained = DoTryToLearn(r); + return Trained; + } + void Learn(ISequenceReader& r) { LearnX(r, 1); } @@ -110,11 +110,11 @@ namespace NCodecs { protected: virtual void DoLearn(ISequenceReader&) = 0; - virtual bool DoTryToLearn(ISequenceReader& r) { - DoLearn(r); - return true; - } - + virtual bool DoTryToLearn(ISequenceReader& r) { + DoLearn(r); + return true; + } + // so the pipeline codec will know to adjust the sample for the subcodecs virtual void DoLearnX(ISequenceReader& r, double /*sampleSizeMultiplier*/) { DoLearn(r); diff --git a/library/cpp/codecs/zstd_dict_codec.cpp b/library/cpp/codecs/zstd_dict_codec.cpp index 3d15e0a823..c42a2879e6 100644 --- a/library/cpp/codecs/zstd_dict_codec.cpp +++ b/library/cpp/codecs/zstd_dict_codec.cpp @@ -145,7 +145,7 @@ namespace NCodecs { } } - bool Learn(ISequenceReader& in, bool throwOnError) { + bool Learn(ISequenceReader& in, bool throwOnError) { TBuffer data; TVector<size_t> lens; @@ -168,19 +168,19 @@ namespace NCodecs { if (!lens) { Dict.Reset(); } else { - size_t trainResult = ZDICT_trainFromBuffer_legacy( - Dict.data(), Dict.size(), data.Data(), const_cast<const size_t*>(&lens[0]), lens.size(), params); - if (ZSTD_isError(trainResult)) { - if (!throwOnError) { - return false; - } - CheckSize(trainResult, __LOCATION__); - } - Dict.Resize(trainResult); + size_t trainResult = ZDICT_trainFromBuffer_legacy( + Dict.data(), Dict.size(), data.Data(), const_cast<const size_t*>(&lens[0]), lens.size(), params); + if (ZSTD_isError(trainResult)) { + if (!throwOnError) { + return false; + } + CheckSize(trainResult, __LOCATION__); + } + Dict.Resize(trainResult); Dict.ShrinkToFit(); } InitContexts(); - return true; + return true; } void Save(IOutputStream* out) const { @@ -247,14 +247,14 @@ namespace NCodecs { void TZStdDictCodec::DoLearn(ISequenceReader& in) { Impl = new TImpl(Impl->GetCompressionLevel()); - Impl->Learn(in, true/*throwOnError*/); + Impl->Learn(in, true/*throwOnError*/); + } + + bool TZStdDictCodec::DoTryToLearn(ISequenceReader& in) { + Impl = new TImpl(Impl->GetCompressionLevel()); + return Impl->Learn(in, false/*throwOnError*/); } - bool TZStdDictCodec::DoTryToLearn(ISequenceReader& in) { - Impl = new TImpl(Impl->GetCompressionLevel()); - return Impl->Learn(in, false/*throwOnError*/); - } - void TZStdDictCodec::Save(IOutputStream* out) const { Impl->Save(out); } diff --git a/library/cpp/codecs/zstd_dict_codec.h b/library/cpp/codecs/zstd_dict_codec.h index f23dcff4d0..59c1ad6c60 100644 --- a/library/cpp/codecs/zstd_dict_codec.h +++ b/library/cpp/codecs/zstd_dict_codec.h @@ -30,7 +30,7 @@ namespace NCodecs { protected: void DoLearn(ISequenceReader& in) override; - bool DoTryToLearn(ISequenceReader& in) final; + bool DoTryToLearn(ISequenceReader& in) final; void Save(IOutputStream* out) const override; void Load(IInputStream* in) override; }; diff --git a/library/cpp/containers/flat_hash/lib/containers.h b/library/cpp/containers/flat_hash/lib/containers.h index 5b9edeaa87..82008f2f9c 100644 --- a/library/cpp/containers/flat_hash/lib/containers.h +++ b/library/cpp/containers/flat_hash/lib/containers.h @@ -40,23 +40,23 @@ private: TCage(TCage&&) = default; TCage& operator=(const TCage& rhs) { - switch (rhs.Status_) { - case NS_TAKEN: - if constexpr (std::is_copy_assignable_v<value_type>) { - Value_ = rhs.Value_; - } else { - Value_.emplace(rhs.Value()); - } - break; - case NS_EMPTY: - case NS_DELETED: - if (Value_.has_value()) { - Value_.reset(); - } - break; - default: - Y_VERIFY(false, "Not implemented"); - } + switch (rhs.Status_) { + case NS_TAKEN: + if constexpr (std::is_copy_assignable_v<value_type>) { + Value_ = rhs.Value_; + } else { + Value_.emplace(rhs.Value()); + } + break; + case NS_EMPTY: + case NS_DELETED: + if (Value_.has_value()) { + Value_.reset(); + } + break; + default: + Y_VERIFY(false, "Not implemented"); + } Status_ = rhs.Status_; return *this; } diff --git a/library/cpp/containers/flat_hash/ut/flat_hash_ut.cpp b/library/cpp/containers/flat_hash/ut/flat_hash_ut.cpp index 78fe5e11c0..2b9d6a1dc2 100644 --- a/library/cpp/containers/flat_hash/ut/flat_hash_ut.cpp +++ b/library/cpp/containers/flat_hash/ut/flat_hash_ut.cpp @@ -63,21 +63,21 @@ class TMapTest : public TTestBase { UNIT_ASSERT(!st2.empty()); } - void DoubleCopyAssignmentTest() { - Map st(MAP_INPUT_SAMPLE); - Map st2; - UNIT_ASSERT_UNEQUAL(st, st2); - UNIT_ASSERT(st2.empty()); - - st2 = st; - UNIT_ASSERT_EQUAL(st, st2); - UNIT_ASSERT(!st2.empty()); - - st2 = st; - UNIT_ASSERT_EQUAL(st, st2); - UNIT_ASSERT(!st2.empty()); - } - + void DoubleCopyAssignmentTest() { + Map st(MAP_INPUT_SAMPLE); + Map st2; + UNIT_ASSERT_UNEQUAL(st, st2); + UNIT_ASSERT(st2.empty()); + + st2 = st; + UNIT_ASSERT_EQUAL(st, st2); + UNIT_ASSERT(!st2.empty()); + + st2 = st; + UNIT_ASSERT_EQUAL(st, st2); + UNIT_ASSERT(!st2.empty()); + } + void MoveAssignmentTest() { Map st(MAP_INPUT_SAMPLE); Map st2; @@ -128,7 +128,7 @@ class TMapTest : public TTestBase { UNIT_TEST(CopyConstructionTest); UNIT_TEST(MoveConstructionTest); UNIT_TEST(CopyAssignmentTest); - UNIT_TEST(DoubleCopyAssignmentTest); + UNIT_TEST(DoubleCopyAssignmentTest); UNIT_TEST(MoveAssignmentTest); UNIT_TEST(InsertOrAssignTest); UNIT_TEST(TryEmplaceTest); diff --git a/library/cpp/http/server/http.cpp b/library/cpp/http/server/http.cpp index 4cf7fa0a91..128583bdd7 100644 --- a/library/cpp/http/server/http.cpp +++ b/library/cpp/http/server/http.cpp @@ -37,14 +37,14 @@ namespace { virtual ~IPollAble() { } - virtual void OnPollEvent(TInstant now) = 0; + virtual void OnPollEvent(TInstant now) = 0; }; struct TShouldStop { }; struct TWakeupPollAble: public IPollAble { - void OnPollEvent(TInstant) override { + void OnPollEvent(TInstant) override { throw TShouldStop(); } }; @@ -55,9 +55,9 @@ public: TClientConnection(const TSocket& s, THttpServer::TImpl* serv, NAddr::IRemoteAddrRef listenerSockAddrRef); ~TClientConnection() override; - void OnPollEvent(TInstant now) override; + void OnPollEvent(TInstant now) override; - inline void Activate(TInstant now) noexcept; + inline void Activate(TInstant now) noexcept; inline void DeActivate(); inline void Reject(); @@ -66,7 +66,7 @@ public: NAddr::IRemoteAddrRef ListenerSockAddrRef_; THttpServer::TImpl* HttpServ_ = nullptr; bool Reject_ = false; - TInstant LastUsed; + TInstant LastUsed; TInstant AcceptMoment; size_t ReceivedRequests = 0; }; @@ -75,9 +75,9 @@ class THttpServer::TImpl { public: class TConnections { public: - inline TConnections(TSocketPoller* poller, const THttpServerOptions& options) + inline TConnections(TSocketPoller* poller, const THttpServerOptions& options) : Poller_(poller) - , Options(options) + , Options(options) { } @@ -91,12 +91,12 @@ public: Poller_->WaitRead(c->Socket_, (void*)static_cast<const IPollAble*>(c)); } - inline void Erase(TClientConnection* c, TInstant now) noexcept { + inline void Erase(TClientConnection* c, TInstant now) noexcept { TGuard<TMutex> g(Mutex_); - EraseUnsafe(c); - if (Options.ExpirationTimeout > TDuration::Zero()) { - TryRemovingUnsafe(now - Options.ExpirationTimeout); - } + EraseUnsafe(c); + if (Options.ExpirationTimeout > TDuration::Zero()) { + TryRemovingUnsafe(now - Options.ExpirationTimeout); + } } inline void Clear() noexcept { @@ -105,34 +105,34 @@ public: Conns_.Clear(); } - inline bool RemoveOld(TInstant border) noexcept { + inline bool RemoveOld(TInstant border) noexcept { TGuard<TMutex> g(Mutex_); - return TryRemovingUnsafe(border); - } + return TryRemovingUnsafe(border); + } - bool TryRemovingUnsafe(TInstant border) noexcept { + bool TryRemovingUnsafe(TInstant border) noexcept { if (Conns_.Empty()) { return false; } TClientConnection* c = &*(Conns_.Begin()); - if (c->LastUsed > border) { - return false; - } - EraseUnsafe(c); + if (c->LastUsed > border) { + return false; + } + EraseUnsafe(c); delete c; return true; } - void EraseUnsafe(TClientConnection* c) noexcept { - Poller_->Unwait(c->Socket_); - c->Unlink(); - } - + void EraseUnsafe(TClientConnection* c) noexcept { + Poller_->Unwait(c->Socket_); + c->Unlink(); + } + public: TMutex Mutex_; TIntrusiveListWithAutoDelete<TClientConnection, TDelete> Conns_; TSocketPoller* Poller_ = nullptr; - const THttpServerOptions& Options; + const THttpServerOptions& Options; }; static void* ListenSocketFunction(void* param) { @@ -156,7 +156,7 @@ public: void AddRequestFromSocket(const TSocket& s, TInstant now, NAddr::IRemoteAddrRef listenerSockAddrRef) { if (MaxRequestsReached()) { Cb_->OnMaxConn(); - bool wasRemoved = Connections->RemoveOld(TInstant::Max()); + bool wasRemoved = Connections->RemoveOld(TInstant::Max()); if (!wasRemoved && Options_.RejectExcessConnections) { (new TClientConnection(s, this, listenerSockAddrRef))->Reject(); return; @@ -164,8 +164,8 @@ public: } auto connection = new TClientConnection(s, this, listenerSockAddrRef); - connection->LastUsed = now; - connection->DeActivate(); + connection->LastUsed = now; + connection->DeActivate(); } void SaveErrorCode() { @@ -182,7 +182,7 @@ public: bool Start() { Poller.Reset(new TSocketPoller()); - Connections.Reset(new TConnections(Poller.Get(), Options_)); + Connections.Reset(new TConnections(Poller.Get(), Options_)); // Start the listener thread ListenerRunningOK = false; @@ -348,26 +348,26 @@ public: TVector<void*> events; events.resize(1); - TInstant now = TInstant::Now(); + TInstant now = TInstant::Now(); for (;;) { try { - const TInstant deadline = Options_.PollTimeout == TDuration::Zero() ? TInstant::Max() : now + Options_.PollTimeout; + const TInstant deadline = Options_.PollTimeout == TDuration::Zero() ? TInstant::Max() : now + Options_.PollTimeout; const size_t ret = Poller->WaitD(events.data(), events.size(), deadline); - now = TInstant::Now(); + now = TInstant::Now(); for (size_t i = 0; i < ret; ++i) { - ((IPollAble*)events[i])->OnPollEvent(now); + ((IPollAble*)events[i])->OnPollEvent(now); + } + + if (ret == 0 && Options_.ExpirationTimeout > TDuration::Zero()) { + Connections->RemoveOld(now - Options_.ExpirationTimeout); } - if (ret == 0 && Options_.ExpirationTimeout > TDuration::Zero()) { - Connections->RemoveOld(now - Options_.ExpirationTimeout); - } - - // When MaxConnections is limited or ExpirationTimeout is set, OnPollEvent can call + // When MaxConnections is limited or ExpirationTimeout is set, OnPollEvent can call // RemoveOld and destroy other IPollAble* objects in the // poller. Thus in this case we can safely process only one // event from the poller at a time. - if (!Options_.MaxConnections && Options_.ExpirationTimeout == TDuration::Zero()) { + if (!Options_.MaxConnections && Options_.ExpirationTimeout == TDuration::Zero()) { if (ret >= events.size()) { events.resize(ret * 2); } @@ -570,9 +570,9 @@ TClientConnection::~TClientConnection() { HttpServ_->DecreaseConnections(); } -void TClientConnection::OnPollEvent(TInstant now) { +void TClientConnection::OnPollEvent(TInstant now) { THolder<TClientConnection> this_(this); - Activate(now); + Activate(now); { char tmp[1]; @@ -594,9 +594,9 @@ void TClientConnection::OnPollEvent(TInstant now) { HttpServ_->AddRequest(obj, Reject_); } -void TClientConnection::Activate(TInstant now) noexcept { - HttpServ_->Connections->Erase(this, now); - LastUsed = now; +void TClientConnection::Activate(TInstant now) noexcept { + HttpServ_->Connections->Erase(this, now); + LastUsed = now; ++ReceivedRequests; } diff --git a/library/cpp/http/server/http_ut.cpp b/library/cpp/http/server/http_ut.cpp index 027c03ea44..cc62bb988e 100644 --- a/library/cpp/http/server/http_ut.cpp +++ b/library/cpp/http/server/http_ut.cpp @@ -558,22 +558,22 @@ Y_UNIT_TEST_SUITE(THttpServerTest) { UNIT_ASSERT_STRINGS_EQUAL(serverImpl.ExceptionMessage, "(yexception) some error"); }; - + THttpInput SendRequest(TSocket& socket, ui16 port) { - TSocketInput si(socket); - TSocketOutput so(socket); - THttpOutput out(&so); - out.EnableKeepAlive(true); - out << "GET / HTTP/1.1" << CrLf; - out << "Host: localhost:" + ToString(port) << CrLf; - out << CrLf; - out.Flush(); - - THttpInput input(&si); - input.ReadAll(); + TSocketInput si(socket); + TSocketOutput so(socket); + THttpOutput out(&so); + out.EnableKeepAlive(true); + out << "GET / HTTP/1.1" << CrLf; + out << "Host: localhost:" + ToString(port) << CrLf; + out << CrLf; + out.Flush(); + + THttpInput input(&si); + input.ReadAll(); return input; - } - + } + THttpInput SendRequestWithBody(TSocket& socket, ui16 port, TString body) { TSocketInput si(socket); TSocketOutput so(socket); @@ -590,32 +590,32 @@ Y_UNIT_TEST_SUITE(THttpServerTest) { return input; } - Y_UNIT_TEST(TTestExpirationTimeout) { - TPortManager pm; - const ui16 port = pm.GetPort(); - - TEchoServer serverImpl("test_data"); - THttpServer::TOptions options(port); - options.nThreads = 1; - options.MaxQueueSize = 0; - options.MaxConnections = 0; - options.KeepAliveEnabled = true; - options.ExpirationTimeout = TDuration::Seconds(1); - options.PollTimeout = TDuration::MilliSeconds(100); - THttpServer server(&serverImpl, options); - UNIT_ASSERT(server.Start()); - - TSocket socket(TNetworkAddress("localhost", port), TDuration::Seconds(10)); - - SendRequest(socket, port); - SendRequest(socket, port); - - Sleep(TDuration::Seconds(5)); - UNIT_ASSERT_EXCEPTION(SendRequest(socket, port), THttpReadException); - - server.Stop(); - } - + Y_UNIT_TEST(TTestExpirationTimeout) { + TPortManager pm; + const ui16 port = pm.GetPort(); + + TEchoServer serverImpl("test_data"); + THttpServer::TOptions options(port); + options.nThreads = 1; + options.MaxQueueSize = 0; + options.MaxConnections = 0; + options.KeepAliveEnabled = true; + options.ExpirationTimeout = TDuration::Seconds(1); + options.PollTimeout = TDuration::MilliSeconds(100); + THttpServer server(&serverImpl, options); + UNIT_ASSERT(server.Start()); + + TSocket socket(TNetworkAddress("localhost", port), TDuration::Seconds(10)); + + SendRequest(socket, port); + SendRequest(socket, port); + + Sleep(TDuration::Seconds(5)); + UNIT_ASSERT_EXCEPTION(SendRequest(socket, port), THttpReadException); + + server.Stop(); + } + Y_UNIT_TEST(TTestContentLengthTooLarge) { TPortManager pm; const ui16 port = pm.GetPort(); diff --git a/library/cpp/http/server/options.h b/library/cpp/http/server/options.h index 3378d60549..38eda0e5e7 100644 --- a/library/cpp/http/server/options.h +++ b/library/cpp/http/server/options.h @@ -166,9 +166,9 @@ public: ui64 MaxInputContentLength = sizeof(size_t) <= 4 ? 2_GB : 64_GB; size_t MaxRequestsPerConnection = 0; // If keep-alive is enabled, request limit before connection is closed bool UseElasticQueues = false; - - TDuration PollTimeout; // timeout of TSocketPoller::WaitT call - TDuration ExpirationTimeout; // drop inactive connections after ExpirationTimeout (should be > 0) + + TDuration PollTimeout; // timeout of TSocketPoller::WaitT call + TDuration ExpirationTimeout; // drop inactive connections after ExpirationTimeout (should be > 0) TString ListenThreadName = "HttpListen"; TString RequestsThreadName = "HttpServer"; diff --git a/library/cpp/messagebus/config/ya.make b/library/cpp/messagebus/config/ya.make index 8e5a8f6163..20c7dfed19 100644 --- a/library/cpp/messagebus/config/ya.make +++ b/library/cpp/messagebus/config/ya.make @@ -1,15 +1,15 @@ -LIBRARY() - -OWNER(g:messagebus) - -PEERDIR( +LIBRARY() + +OWNER(g:messagebus) + +PEERDIR( library/cpp/getopt library/cpp/deprecated/enum_codegen -) - -SRCS( - netaddr.cpp - session_config.cpp -) - -END() +) + +SRCS( + netaddr.cpp + session_config.cpp +) + +END() diff --git a/library/cpp/mime/types/mime.cpp b/library/cpp/mime/types/mime.cpp index addf7f6489..706d776b24 100644 --- a/library/cpp/mime/types/mime.cpp +++ b/library/cpp/mime/types/mime.cpp @@ -83,13 +83,13 @@ const TMimeTypes::TRecord TMimeTypes::Records[] = { {MIME_PPTX, "application/vnd.openxmlformats-officedocument.presentationml.presentation\0", "pptx\0"}, {MIME_JAVASCRIPT, "application/javascript\0text/javascript\0", "js\0"}, {MIME_EPUB, "application/epub+zip\0", "epub\0"}, - {MIME_TEX, "application/x-tex\0application/x-latex\0text/x-tex\0", "tex\0"}, + {MIME_TEX, "application/x-tex\0application/x-latex\0text/x-tex\0", "tex\0"}, {MIME_JSON, "application/json\0", "json\0"}, {MIME_APK, "application/vnd.android.package-archive\0", "apk\0"}, {MIME_CSS, "text/css\0", "css\0"}, {MIME_IMAGE_WEBP, "image/webp\0", "webp\0"}, {MIME_DJVU, "image/vnd.djvu\0image/x-djvu\0", "djvu\0djv\0"}, - {MIME_CHM, "application/x-chm\0application/vnd.ms-htmlhelp\0", "chm\0"}, + {MIME_CHM, "application/x-chm\0application/vnd.ms-htmlhelp\0", "chm\0"}, {MIME_FB2ZIP, "application/zip\0", "fb2zip\0"}, {MIME_IMAGE_TIFF, "image/tiff\0image/tiff-fx\0", "tif\0tiff\0"}, {MIME_IMAGE_PNM, "image/x-portable-anymap\0", "pnm\0pgm\0ppm\0pbm\0"}, @@ -240,7 +240,7 @@ const char* MimeNames[MIME_MAX] = { "css", // MIME_CSS // 34 "webp", // MIME_IMAGE_WEBP // 35 "djvu", // MIME_DJVU // 36 - "chm", // MIME_CHM // 37 + "chm", // MIME_CHM // 37 "fb2zip", // MIME_FB2ZIP // 38 "tiff", // MIME_IMAGE_TIFF // 39 "pnm", // MIME_IMAGE_PNM // 40 diff --git a/library/cpp/mime/types/mime.h b/library/cpp/mime/types/mime.h index 2479e7cc8e..05da389ea9 100644 --- a/library/cpp/mime/types/mime.h +++ b/library/cpp/mime/types/mime.h @@ -48,7 +48,7 @@ enum MimeTypes { MIME_CSS = 34, MIME_IMAGE_WEBP = 35, MIME_DJVU = 36, - MIME_CHM = 37, + MIME_CHM = 37, MIME_FB2ZIP = 38, MIME_IMAGE_TIFF = 39, MIME_IMAGE_PNM = 40, diff --git a/library/cpp/mime/ya.make b/library/cpp/mime/ya.make index 75f9364181..8ce42f207d 100644 --- a/library/cpp/mime/ya.make +++ b/library/cpp/mime/ya.make @@ -1,5 +1,5 @@ RECURSE( detect - detect_ut + detect_ut types ) diff --git a/library/cpp/object_factory/object_factory.h b/library/cpp/object_factory/object_factory.h index f479d18edf..96cc11bcfd 100644 --- a/library/cpp/object_factory/object_factory.h +++ b/library/cpp/object_factory/object_factory.h @@ -145,12 +145,12 @@ namespace NObjectFactory { return Singleton<TObjectFactory<TProduct, TKey>>()->GetKeys(keys); } - static TSet<TKey> GetRegisteredKeys() { - TSet<TKey> keys; - Singleton<TObjectFactory<TProduct, TKey>>()->GetKeys(keys); - return keys; - } - + static TSet<TKey> GetRegisteredKeys() { + TSet<TKey> keys; + Singleton<TObjectFactory<TProduct, TKey>>()->GetKeys(keys); + return keys; + } + template <class TDerivedProduct> static TSet<TKey> GetRegisteredKeys() { TSet<TKey> registeredKeys(GetRegisteredKeys()); @@ -212,12 +212,12 @@ namespace NObjectFactory { return Singleton<TParametrizedObjectFactory<TProduct, TKey, TArgs...>>()->GetKeys(keys); } - static TSet<TKey> GetRegisteredKeys() { - TSet<TKey> keys; - Singleton<TParametrizedObjectFactory<TProduct, TKey, TArgs...>>()->GetKeys(keys); - return keys; - } - + static TSet<TKey> GetRegisteredKeys() { + TSet<TKey> keys; + Singleton<TParametrizedObjectFactory<TProduct, TKey, TArgs...>>()->GetKeys(keys); + return keys; + } + template <class Product> class TRegistrator { public: |