83 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "Kernel.h"
 | 
						|
 | 
						|
namespace BlueCore
 | 
						|
{
 | 
						|
 | 
						|
Kernel::Kernel() :
 | 
						|
  _Changed(true), _Clear(false)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void Kernel::addTask(KernelTask* task, int priority)
 | 
						|
{
 | 
						|
  _AddedTasks.push_back(KernelTaskContainer (task, priority));
 | 
						|
  _Changed = true;
 | 
						|
}
 | 
						|
 | 
						|
void Kernel::removeTask(KernelTask* task)
 | 
						|
{
 | 
						|
  _RemovedTasks.push_back(task );
 | 
						|
  _Changed = true;
 | 
						|
}
 | 
						|
 | 
						|
void Kernel::removeAllTasks()
 | 
						|
{
 | 
						|
  _Clear = true;
 | 
						|
}
 | 
						|
 | 
						|
void Kernel::setTaskPriority(KernelTask* task, int priority)
 | 
						|
{
 | 
						|
  std::list<KernelTaskContainer>::iterator i;
 | 
						|
  for (i = _Tasks.begin(); i != _Tasks.end(); i++)
 | 
						|
  {
 | 
						|
    if ((*i)._Task == task)
 | 
						|
    {
 | 
						|
      (*i)._Priority = priority;
 | 
						|
      _Changed = true;
 | 
						|
      return;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
bool Kernel::tick()
 | 
						|
{
 | 
						|
  if (_Changed)
 | 
						|
  {
 | 
						|
    std::list<KernelTaskContainer>::iterator i;
 | 
						|
    for (i = _AddedTasks.begin(); i != _AddedTasks.end(); i++)
 | 
						|
    {
 | 
						|
      _Tasks.push_back( *i );
 | 
						|
    }
 | 
						|
 | 
						|
    _AddedTasks.clear();
 | 
						|
    _RemovedTasks.clear();
 | 
						|
    _Tasks.sort();
 | 
						|
    _Changed = false;
 | 
						|
  }
 | 
						|
 | 
						|
  std::list<KernelTaskContainer>::iterator i = _Tasks.begin();
 | 
						|
  std::list<KernelTaskContainer>::iterator end = _Tasks.end();
 | 
						|
 | 
						|
  if (i == end)
 | 
						|
    return false;
 | 
						|
 | 
						|
  while (i != end)
 | 
						|
  {
 | 
						|
    if ((*i)._Task.valid())
 | 
						|
      (*i)._Task->tick();
 | 
						|
    i++;
 | 
						|
  }
 | 
						|
 | 
						|
  if (_Clear)
 | 
						|
  {
 | 
						|
    _Tasks.clear();
 | 
						|
    _Clear = false;
 | 
						|
  }
 | 
						|
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
} // namespace BlueCore
 | 
						|
 |