JobManager.cpp
#include<iostream>
#include"JobManager.h"
using namespace std;
JobManager* JobManager:: instance = NULL;
JobManager* JobManager:: getInstance() {
if (!instance)
instance = new JobManager;
return instance;
}
bool JobManager:: deleteInstance() {
if (instance) {
delete instance;
instance = NULL;
return 1;
}
return 0;
}
void JobManager::addJob(int priority) {
Job *n_job = new Job(priority);
Job *find;
if (!jobFrontPointer)
jobFrontPointer = n_job;
else {
find = jobFrontPointer;
while(find->getNext())
find = find->getNext();
find->setNext(n_job);
}
}
void JobManager::finishOneJob() {
Job* d_job = jobFrontPointer;
if (d_job) {
jobFrontPointer = jobFrontPointer->getNext();
delete d_job;
}
}
void JobManager::sortJob() {
Job* f_job = jobFrontPointer;//f_job表示外層, s_job表示內層,p_f表示f_job前一節點, p_s表示s_job前一節點
Job* s_job = f_job->getNext();
Job* p_f;
Job* p_s;
Job* temp;
while (f_job) {
s_job = f_job->getNext();
p_s = f_job; //此處一定要重新標記p_s, 否則p_s仍然留在末尾
while (s_job) {
if (f_job->getPriority() < s_job->getPriority() || f_job->getPriority() == s_job->getPriority() && f_job->getId() > s_job->getId()) {
if (p_s == f_job) {
f_job->setNext(s_job->getNext());
s_job->setNext(f_job);
if (f_job == jobFrontPointer)
jobFrontPointer = s_job;
else
p_f->setNext(s_job);
}
else {
Job* n_f = f_job->getNext();
Job* n_s = s_job->getNext();
f_job->setNext(n_s);
s_job->setNext(n_f);
p_s->setNext(f_job);
if (f_job == jobFrontPointer)
jobFrontPointer = s_job;
else
p_f->setNext(s_job);
}
temp = f_job;
f_job = s_job;
s_job = temp;
}
p_s = s_job;
s_job = s_job->getNext();
}
p_f = f_job;
f_job = f_job->getNext();
}
}
void JobManager::printJob() {
Job* f_job = jobFrontPointer;
while (f_job) {
cout << f_job->toString();
if (f_job->getNext())
cout << "->";
else
cout << endl;
f_job = f_job->getNext();
}
}
int JobManager::getNumOfJob() {
int num = 0;
Job* f_job = jobFrontPointer;
while (f_job) {
++num;
f_job = f_job->getNext();
}
return num;
}
void JobManager::clear() {
Job* d_job;
while (jobFrontPointer) {
d_job = jobFrontPointer;
jobFrontPointer = jobFrontPointer->getNext();
delete d_job;
}
d_job = NULL;
cout << "empty!\n";
}
JobManager::JobManager() {
jobFrontPointer = NULL;
}
JobManager::~JobManager() {
clear();
}
Job.cpp
#include<iostream>
#include"Job.h"
#include<sstream>
int Job::number = 0;
Job::Job(int priority) {
id = number;
this->priority = priority;
nextJob = NULL;
++number;
}
void Job::setId(int id) {
this->id = id;
}
int Job::getId() const {
return id;
}
void Job::setPriority(int priority) {
this->priority = priority;
}
int Job::getPriority() const {
return priority;
}
void Job::setNext(Job *job) {
nextJob = job;
}
Job* Job::getNext() const {
return nextJob;
}
string Job::toString() {
stringstream s1;
stringstream s2;
s1 << id;
string s_id = s1.str();
s2 << priority;
string s_priority = s2.str();
string result = "[" + s_id + ":" + s_priority + "]";
return result;
}