AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
TaskScheduler::TaskQueue Class Reference

Public Member Functions

void Push (TaskContainer &&task)
 
TaskContainer Pop ()
 Pops the task out of the container.
 
TaskContainer const & First () const
 
void Clear ()
 
void RemoveIf (std::function< bool(TaskContainer const &)> const &filter)
 
void ModifyIf (std::function< bool(TaskContainer const &)> const &filter)
 
bool IsGroupQueued (group_t const group)
 Check if the group exists and is currently scheduled.
 
TaskScheduler::timepoint_t GetNextGroupOccurrence (group_t const group) const
 
bool IsEmpty () const
 

Private Attributes

std::multiset< TaskContainer, Comparecontainer
 

Detailed Description

Member Function Documentation

◆ Clear()

void TaskScheduler::TaskQueue::Clear ( )
150{
151 container.clear();
152}
std::multiset< TaskContainer, Compare > container
Definition TaskScheduler.h:131

Referenced by TaskScheduler::CancelAll().

◆ First()

auto TaskScheduler::TaskQueue::First ( ) const
145{
146 return *container.begin();
147}

Referenced by TaskScheduler::Dispatch().

◆ GetNextGroupOccurrence()

TaskScheduler::timepoint_t TaskScheduler::TaskQueue::GetNextGroupOccurrence ( group_t const  group) const
198{
199 TaskScheduler::timepoint_t next = TaskScheduler::timepoint_t::max();
200 for (auto const& task : container)
201 if (task->IsInGroup(group) && task->_end < next)
202 next = task->_end;
203 return next;
204}
clock_t::time_point timepoint_t
Definition TaskScheduler.h:50

Referenced by TaskScheduler::GetNextGroupOccurrence().

◆ IsEmpty()

bool TaskScheduler::TaskQueue::IsEmpty ( ) const
207{
208 return container.empty();
209}

Referenced by TaskScheduler::Dispatch().

◆ IsGroupQueued()

bool TaskScheduler::TaskQueue::IsGroupQueued ( group_t const  group)

Check if the group exists and is currently scheduled.

185{
186 for (auto const& task : container)
187 {
188 if (task->IsInGroup(group))
189 {
190 return true;
191 }
192 }
193
194 return false;
195}

Referenced by TaskScheduler::IsGroupScheduled().

◆ ModifyIf()

void TaskScheduler::TaskQueue::ModifyIf ( std::function< bool(TaskContainer const &)> const &  filter)
168{
169 std::vector<TaskContainer> cache;
170 for (auto itr = container.begin(); itr != container.end();)
171 if (filter(*itr))
172 {
173 cache.push_back(*itr);
174 itr = container.erase(itr);
175 }
176 else
177 {
178 ++itr;
179 }
180
181 container.insert(cache.begin(), cache.end());
182}

Referenced by TaskScheduler::DelayAll(), TaskScheduler::DelayGroup(), TaskScheduler::RescheduleAll(), and TaskScheduler::RescheduleGroup().

◆ Pop()

auto TaskScheduler::TaskQueue::Pop ( )

Pops the task out of the container.

138{
139 TaskContainer result = *container.begin();
140 container.erase(container.begin());
141 return result;
142}
std::shared_ptr< Task > TaskContainer
Definition TaskScheduler.h:118

Referenced by TaskScheduler::Dispatch().

◆ Push()

void TaskScheduler::TaskQueue::Push ( TaskContainer &&  task)
133{
134 container.insert(task);
135}

References container.

Referenced by TaskScheduler::InsertTask().

◆ RemoveIf()

void TaskScheduler::TaskQueue::RemoveIf ( std::function< bool(TaskContainer const &)> const &  filter)
155{
156 for (auto itr = container.begin(); itr != container.end();)
157 if (filter(*itr))
158 {
159 itr = container.erase(itr);
160 }
161 else
162 {
163 ++itr;
164 }
165}

Referenced by TaskScheduler::CancelGroup().

Member Data Documentation

◆ container

std::multiset<TaskContainer, Compare> TaskScheduler::TaskQueue::container
private

Referenced by Push().


The documentation for this class was generated from the following files: