aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2023-04-02 09:13:26 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2023-04-02 09:13:26 +0300
commite95c7683c7bb53d4cc92003b26f2c8c447279703 (patch)
treea6c26b2c8b36f651ca05fd018f4b21ceb7eaa96a
parent3f9f089dcf9159319ee24ecd39c748d6229f1b34 (diff)
downloadydb-e95c7683c7bb53d4cc92003b26f2c8c447279703.tar.gz
general actor id constructor for signals and stats
remove useless method necessary
-rw-r--r--library/cpp/actors/core/actor.h27
-rw-r--r--library/cpp/actors/util/local_process_key.h18
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: