diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-04-02 09:13:26 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-04-02 09:13:26 +0300 |
commit | e95c7683c7bb53d4cc92003b26f2c8c447279703 (patch) | |
tree | a6c26b2c8b36f651ca05fd018f4b21ceb7eaa96a /library | |
parent | 3f9f089dcf9159319ee24ecd39c748d6229f1b34 (diff) | |
download | ydb-e95c7683c7bb53d4cc92003b26f2c8c447279703.tar.gz |
general actor id constructor for signals and stats
remove useless method necessary
Diffstat (limited to 'library')
-rw-r--r-- | library/cpp/actors/core/actor.h | 27 | ||||
-rw-r--r-- | library/cpp/actors/util/local_process_key.h | 18 |
2 files changed, 29 insertions, 16 deletions
diff --git a/library/cpp/actors/core/actor.h b/library/cpp/actors/core/actor.h index 4e0e9b4560..dc9d4d078b 100644 --- a/library/cpp/actors/core/actor.h +++ b/library/cpp/actors/core/actor.h @@ -619,32 +619,27 @@ namespace NActors { class TActor: public IActorCallback { private: template <typename T, typename = const char*> - struct HasActorName: std::false_type { }; + struct HasActorName: std::false_type {}; template <typename T> - struct HasActorName<T, decltype((void)T::ActorName, (const char*)nullptr)>: std::true_type { }; + struct HasActorName<T, decltype((void)T::ActorName, (const char*)nullptr)>: std::true_type {}; + + template <typename T, typename = const char*> + struct HasActorActivityType: std::false_type {}; + template <typename T> + struct HasActorActivityType<T, decltype((void)T::ActorActivityType, (const char*)nullptr)>: std::true_type {}; static ui32 GetActivityTypeIndex() { if constexpr(HasActorName<TDerived>::value) { return TLocalProcessKey<TActorActivityTag, TDerived::ActorName>::GetIndex(); - } else { + } else if constexpr (HasActorActivityType<TDerived>::value) { using TActorActivity = decltype(((TDerived*)nullptr)->ActorActivityType()); - // if constexpr(std::is_enum<TActorActivity>::value) { - return TEnumProcessKey<TActorActivityTag, TActorActivity>::GetIndex( - TDerived::ActorActivityType()); - //} else { - // for int, ui32, ... - // return TEnumProcessKey<TActorActivityTag, IActor::EActorActivity>::GetIndex( - // static_cast<IActor::EActorActivity>(TDerived::ActorActivityType())); - //} + return TEnumProcessKey<TActorActivityTag, TActorActivity>::GetIndex(TDerived::ActorActivityType()); + } else { + return TLocalProcessExtKey<TActorActivityTag, TDerived>::GetIndex(); } } protected: - //* Comment this function to find unmarked activities - static constexpr IActor::EActivityType ActorActivityType() { - return IActorCallback::EActorActivity::OTHER; - } //*/ - // static constexpr char ActorName[] = "UNNAMED"; TActor(void (TDerived::*func)(TAutoPtr<IEventHandle>& ev, const TActorContext&), ui32 activityType = GetActivityTypeIndex()) diff --git a/library/cpp/actors/util/local_process_key.h b/library/cpp/actors/util/local_process_key.h index 172f08fc73..b82db5cfe5 100644 --- a/library/cpp/actors/util/local_process_key.h +++ b/library/cpp/actors/util/local_process_key.h @@ -12,6 +12,8 @@ class TLocalProcessKeyState { template <typename U, const char* Name> friend class TLocalProcessKey; +template <typename U, class TClass> +friend class TLocalProcessExtKey; template <typename U, typename EnumT> friend class TEnumProcessKey; @@ -90,6 +92,22 @@ private: inline static size_t Index = TLocalProcessKeyState<T>::GetInstance().Register(Name); }; +template <typename T, class TClass> +class TLocalProcessExtKey { +public: + static TStringBuf GetName() { + return Name; + } + + static size_t GetIndex() { + return Index; + } + +private: + static const inline TString Name = TypeName<TClass>(); + inline static size_t Index = TLocalProcessKeyState<T>::GetInstance().Register(TypeName<TClass>()); +}; + template <typename T, typename EnumT> class TEnumProcessKey { public: |