// Copyright (c) OpenMMLab. All rights reserved. #ifndef MMDEPLOY_SRC_TOKEN_TOKEN_H_ #define MMDEPLOY_SRC_TOKEN_TOKEN_H_ #include #include #include #include #include #include #include "core/status_code.h" namespace mmdeploy { namespace token { template using String = std::integer_sequence; // this is a GCC only extension template constexpr String operator""_ts() { return {}; } template const char* c_str(String) { static constexpr const char str[sizeof...(cs) + 1] = {cs..., '\0'}; return str; } } // namespace token // template // static void* signature() { // static char id = 0; // return &id; // } // // using signature_t = decltype(signature()); template struct Token { using signature_t = void*; using value_type = T; Token(T value = {}) : value_(value) {} // NOLINT operator T() const { return value_; } // NOLINT static const char* key() { return token::c_str(Key{}); } T& operator*() { return value_; } T* operator->() { return &value_; } private: T value_; }; template class Identifier { public: constexpr explicit Identifier(const char* key) : key_(key) {} const char* key_; }; constexpr inline Identifier batch_size{"batch_size"}; } // namespace mmdeploy #endif // MMDEPLOY_SRC_TOKEN_TOKEN_H_