84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef KERNEL_H_
 | ||
|  | #define KERNEL_H_
 | ||
|  | 
 | ||
|  | #include "Referenced.h"
 | ||
|  | 
 | ||
|  | #include <vector>
 | ||
|  | #include <iostream>
 | ||
|  | #include <exception>
 | ||
|  | #include <list>
 | ||
|  | 
 | ||
|  | namespace BlueCore | ||
|  | { | ||
|  | 
 | ||
|  | class Kernel; | ||
|  | 
 | ||
|  | //-----------------------------------------------------------------------------
 | ||
|  | class KernelTask : public Referenced | ||
|  | { | ||
|  |   protected: | ||
|  | 
 | ||
|  |     ~KernelTask() | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |   public: | ||
|  | 
 | ||
|  |     KernelTask() | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |     virtual void tick() | ||
|  |     { | ||
|  |     } | ||
|  | }; | ||
|  | 
 | ||
|  | //-----------------------------------------------------------------------------
 | ||
|  | class Kernel : public Referenced | ||
|  | { | ||
|  |   private: | ||
|  | 
 | ||
|  |     struct KernelTaskContainer | ||
|  |     { | ||
|  |         ref_ptr<KernelTask> _Task; | ||
|  |         int _Priority; | ||
|  | 
 | ||
|  |         KernelTaskContainer(KernelTask* task, int priority) : | ||
|  |           _Task(task), _Priority(priority) | ||
|  |         { | ||
|  |         } | ||
|  | 
 | ||
|  |         bool operator <(const KernelTaskContainer& other) const | ||
|  |         { | ||
|  |           return (_Priority > other._Priority); | ||
|  |         } | ||
|  |     }; | ||
|  | 
 | ||
|  |     std::list<KernelTaskContainer> _Tasks; | ||
|  |     std::list<KernelTaskContainer> _AddedTasks; | ||
|  |     std::list<KernelTask*> _RemovedTasks; | ||
|  |     bool _Changed; | ||
|  |     bool _Clear; | ||
|  | 
 | ||
|  |   protected: | ||
|  | 
 | ||
|  |     ~Kernel() | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |   public: | ||
|  | 
 | ||
|  |     Kernel(); | ||
|  | 
 | ||
|  |     void addTask(KernelTask* task, int priority); | ||
|  |     void removeTask(KernelTask* task); | ||
|  |     void removeAllTasks(); | ||
|  |     void setTaskPriority(KernelTask* task, int priority); | ||
|  |     bool tick(); | ||
|  | }; | ||
|  | 
 | ||
|  | } // namespace BlueCore
 | ||
|  | 
 | ||
|  | #endif /*KERNEL_H_*/
 | ||
|  | 
 |