//----------------------------------------------------------------------
//  SPECIFICATION FILE (scheduler.h)
//----------------------------------------------------------------------
#ifndef SCHEDULER_H
#define SCHEDULER_H

#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

#include "bool.h"
#include "debug.h"
#include "processq.h"
#include "process.h"

typedef enum {RR ,FCFS ,Priority} SchedType;
const TimeSlice = 50;

class Scheduler
{
 private:
	ProcessQ        NewPQ;          //The New Process Queue
	ProcessQ        ReadyQ;         //The Ready Queue
	ProcessQ        WaitingQ;       //The Waiting Queue
	ProcessQ        TermQ;          //The Terminated Queue
	int             NumPending;     //Number of active processes
	Process 	*Current;	//Process currently on CPU

 public:
    Scheduler(char *, char *, char *);

    ~Scheduler();

    void CheckNewP(int);

    Boolean Manage(SchedType, int);

    int GetNumPending();

    void Report();

private:
    
    void DoFCFS(int);
    
    void DoRR(int);
    
    void DoPriority(int);

    void Enqueue(Process *, int);

    void ServiceRQ(int);

    void ServiceWQ(int);

    void ServiceCur(int);
};
#endif

