Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. template <typename R>
  2. class ResourceManager
  3. {
  4. public:
  5. ResourceManager() = default;
  6.  
  7. template <typename T>
  8. void set(const R& name, T& object);
  9.  
  10. template <typename T>
  11. T get(const R& name);
  12.  
  13. private:
  14. QHash<R, void*> m_objectsMap;
  15. };
  16.  
  17. template <typename R>
  18. template <typename T>
  19. void ResourceManager<R>::set(const R& name, T& object) {
  20. m_objectsMap.insert(name, reinterpret_cast<void*>(&object));
  21. }
  22.  
  23. template <typename R>
  24. template <typename T>
  25. T ResourceManager<R>::get(const R& name) {
  26. auto it = m_objectsMap.find(name);
  27.  
  28. if (it == m_objectsMap.end()) throw std::invalid_argument("The item doesn't exists");
  29.  
  30. return *static_cast<T*>(it.value());
  31. }
  32.  
  33. struct UserData {
  34. QString username = "";
  35. QString permissions = "";
  36.  
  37. QString token = "";
  38. qint64 lastTimeUsed = 0;
  39.  
  40. UserData() {}
  41. };
  42.  
  43. void f() {
  44. UserData userData;
  45. userData.username = userStruct.username;
  46. userData.permissions = userStruct.permissions;
  47. userData.token = token;
  48. userData.updateLastTimeUsed();
  49.  
  50. qDebug() << "[Users][actionCheckToken]userData='" << userData.toString() << "'";
  51.  
  52. client.getResourceManager()->set<UserData>(USER_RESOURCEMANAGER_USERDATA_KEY, userData);
  53. }
  54.  
  55. 1 std::__atomic_base<int>::load atomic_base.h 396 0x55555556500e
  56. 2 QAtomicOps<int>::load<int> qatomic_cxx11.h 227 0x55555556500e
  57. 3 QBasicAtomicInteger<int>::load qbasicatomic.h 103 0x555555563e5e
  58. 4 QtPrivate::RefCount::ref qrefcount.h 55 0x5555555624a6
  59. 5 QString::QString qstring.h 958 0x5555555629a9
  60. 6 Users::UserData::UserData <- my struct Users.hpp 26 0x555555578cf1
  61. 7 ResourceManager<QString>::get<Users::UserData> ResourceManager.hpp 36 0x555555578df4
  62. 8 [function from where I call]
  63.  
  64. void b(Client& client) {
  65. qDebug() << "[Users][userIsLogged]Called" << "clientID='" + client.getID() + "'";
  66.  
  67. auto userData = client.getResourceManager()->get<UserData>(USER_RESOURCEMANAGER_USERDATA_KEY);
  68.  
  69. // ...
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement