TaskMeta.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019 Chris Ohk, Youngjoong Kim, SeungHyun Jeon
2 
3 // We are making my contributions/submissions to this project solely in our
4 // personal capacity and are not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef ROSETTASTONE_TASK_META_HPP
8 #define ROSETTASTONE_TASK_META_HPP
9 
13 
14 #include <any>
15 
16 namespace RosettaStone
17 {
25 {
26  public:
27  static constexpr std::size_t USER_INVALID = Player::USER_INVALID;
28 
30  TaskMetaTrait() = default;
31 
34  TaskMetaTrait(TaskID id);
35 
39  TaskMetaTrait(TaskID id, TaskStatus status);
40 
45  TaskMetaTrait(TaskID id, TaskStatus status, std::size_t userID);
46 
48  ~TaskMetaTrait() = default;
49 
51  TaskMetaTrait(const TaskMetaTrait& trait) = default;
52 
54  TaskMetaTrait(TaskMetaTrait&& trait) = default;
55 
57  TaskMetaTrait& operator=(const TaskMetaTrait& trait) = default;
58 
60  TaskMetaTrait& operator=(TaskMetaTrait&& trait) = default;
61 
63  bool operator==(const TaskMetaTrait& trait) const;
64 
67  TaskID GetID() const;
68 
71  void SetID(TaskID id);
72 
75  TaskStatus GetStatus() const;
76 
79  void SetStatus(TaskStatus status);
80 
83  std::size_t GetUserID() const;
84 
85  protected:
88  std::size_t m_userID = USER_INVALID;
89 };
90 
97 class TaskMeta : public TaskMetaTrait
98 {
99  public:
101  TaskMeta() = default;
102 
105  TaskMeta(const TaskMetaTrait& trait);
106 
110  TaskMeta(const TaskMetaTrait& trait, std::any object);
111 
113  ~TaskMeta() = default;
114 
116  TaskMeta(const TaskMeta&);
117 
119  TaskMeta(TaskMeta&& meta) noexcept;
120 
122  TaskMeta& operator=(const TaskMeta&);
123 
125  TaskMeta& operator=(TaskMeta&& meta) noexcept;
126 
128  void Reset();
129 
132  bool HasObjects() const;
133 
136  template <typename T>
138  {
139  return std::any_cast<T&>(m_object);
140  }
141 
144  template <typename T>
145  const T& GetObject() const
146  {
147  return std::any_cast<const T&>(m_object);
148  }
149 
152  template <typename T>
154  {
155  return std::any_cast<T&&>(std::move(m_object));
156  }
157 
158  private:
159  std::any m_object;
160 };
161 } // namespace RosettaStone
162 
163 #endif // ROSETTASTONE_TASK_META_HPP
TaskStatus GetStatus() const
~TaskMeta()=default
Default destructor.
bool HasObjects() const
TaskStatus
Meta data to represent the result of the task.
Definition: TaskStatus.hpp:15
TaskMeta class.
Definition: TaskMeta.hpp:97
TaskID m_id
Definition: TaskMeta.hpp:86
TaskMetaTrait & operator=(const TaskMetaTrait &trait)=default
Default copy assignment operator.
void Reset()
Resets object.
const T & GetObject() const
Definition: TaskMeta.hpp:145
bool operator==(const TaskMetaTrait &trait) const
Operator overloading: The equality operator.
TaskStatus m_status
Definition: TaskMeta.hpp:87
std::size_t m_userID
Definition: TaskMeta.hpp:88
static constexpr std::size_t USER_INVALID
Definition: TaskMeta.hpp:27
void SetStatus(TaskStatus status)
~TaskMetaTrait()=default
Default destructor.
T MoveObject()
Definition: TaskMeta.hpp:153
TaskMetaTrait class.
Definition: TaskMeta.hpp:24
T & GetObject()
Definition: TaskMeta.hpp:137
TaskMetaTrait()=default
Default constructor.
std::size_t GetUserID() const
TaskMeta & operator=(const TaskMeta &)
Copy assignment operator.
static constexpr std::size_t USER_INVALID
Definition: Player.hpp:36
Definition: AccountInfo.hpp:14
TaskMeta()=default
Default constructor.