1
0
Files
irix-657m-src/eoe/cmd/bps/BPSJob.H
2022-09-29 17:59:04 +03:00

82 lines
2.8 KiB
C++

/****************************************************************/
/* NAME: */
/* ACCT: kostadis */
/* FILE: BPSJob.H */
/* ASGN: */
/* DATE: Sat Jul 8 15:17:38 1995 */
/****************************************************************/
#ifndef BPSJOB_HEADER
#define BPSJOB_HEADER
#include <bps.h>
#include <BPSPrivate.H>
#include <Thread.H>
#include <BPS_lib.H>
#include <bool.h>
#include <stl.h>
class BPSSSPartition;
typedef queue<list<bps_job_t> > jobqueue;
/****************************************************************
* CLASS NAME : BPSJob
BPSJob represents an allocation of resources in the form of a job.
A couple of points:
1. A job is maintained as a job queue, rather than a single job,
the reason for that is that it is conceivable in a future revision
that a job will not represent a single contiguous allocation
but rather a series of non-contiguous and non-uniform allocations.
2. A job can be converted from a BPSJob to bps_job_t by the 'getJob'
method. This needs to be extended if we decide to go with the
BPSJob 'having more than one job_t' philosophy.
3. A job has a link to the partition the allocation was made from, and
a read lock on it. When it is deleted, it deallocates any unused resources,
and unlocks the partition.
****************************************************************/
class BPSJob {
protected:
RWLock_writer rw_lock_;
bps_time_t start_time_,end_time_;
jobqueue * jobqueue_;
BPSSSPartition* sspart_;
bps_magic_cookie_t magic_cookie_;
public:
BPSJob(jobqueue* job,
BPSSSPartition* sspart,
bps_time_t start_time,
bps_time_t end_time,
const bps_magic_cookie_t& magic_cookie);
BPSJob(BPSSSPartition* sspart,
bps_time_t start_time,
bps_time_t end_time,
const bps_magic_cookie_t& magic_cookie,
bps_job_t job);
~BPSJob();
bool_t rlock();
bool_t wlock();
bool_t unlock();
bool operator==(const BPSJob&) {assert (1==0); return 1;};
bool operator<(const BPSJob&){assert (1==0); return 1;}
const bps_time_t& startTime();
const bps_time_t& endTime();
error_t getJob(bps_job_t& job);
const bps_magic_cookie_t& getCookie(); // returns the cookie of the job
BPSSSPartition* getPartition() const; // returns the associated partition
friend ostream& operator << (ostream& os, const BPSJob& job);
};
bool operator==(const bps_job_t&, const bps_job_t&);
bool operator<(const bps_job_t&, const bps_job_t&);
bool operator>(const bps_job_t&, const bps_job_t&);
#endif