- Separate template definition from template declaration

- Explicitly instantiate Singleton templates to be exported from libbackend.so
- Install only header files that are backend interfaces to be exposed to the user
- Don't use full path for including templates in header files
- Instantiate a couple of smart_ptr templates to have their symbols exported outside the DSO. This happens in history.cc. FIXME: the interface for History will definitely need to be reworked, and the two smart_ptr explicit instantiations removed.
- Change SWIG exported interface to make use of Schedulable instead of (Dynamic|Static)Schedulable
- Fix provided policies to make use of the new interface
- TODO: limit the use of smart_ptrs.


git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@653 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-06-23 13:06:39 +00:00
parent 56db7cd6a2
commit 66d46db357
37 changed files with 153 additions and 145 deletions

View file

@ -41,6 +41,6 @@ class fcfs(Policy) :
def sort_queue(self, queue):
cmpf = lambda a, b: \
a.get_schedulable().get_arrival_time() < \
b.get_schedulable().get_arrival_time()
a.get_arrival_time() < \
b.get_arrival_time()
self.sort(queue,cmpf)

View file

@ -41,6 +41,6 @@ class sjf(Policy) :
def sort_queue(self, queue):
cmpf = lambda a, b: \
a.get_cpu_time_left() < \
b.get_cpu_time_left()
a.get_remaining_time() < \
b.get_remaining_time()
self.sort(queue,cmpf)

View file

@ -130,21 +130,33 @@ namespace sgpem {
}; //~ class PolicyParameters
// --------------------------------------------
class StaticSchedulable
class Schedulable
{
public:
virtual ~StaticSchedulable() = 0;
virtual unsigned int get_arrival_time() const;
int get_priority() const;
unsigned int get_total_cpu_time() const;
virtual ~Schedulable() = 0;
enum state
{
state_running = 1<<0,
state_ready = 1<<1,
state_blocked = 1<<2,
state_future = 1<<3,
state_terminated = 1<<4
};
%ignore StaticSchedulable::get_name() const;
%extend {
const char* get_name() const
virtual unsigned int get_arrival_time() const = 0;
virtual unsigned int get_remaining_time() const = 0;
virtual int get_base_priority() const = 0;
virtual int get_current_priority() const = 0;
virtual unsigned int get_total_cpu_time() const = 0;
virtual state get_state() const = 0;
%ignore Schedulable::get_name() const;
%extend {
const char* get_name() const
{ return self->get_name().c_str(); }
}
}; //~ class StaticSchedulable
}
}; //~ class Schedulable
// --------------------------------------------
@ -152,7 +164,7 @@ namespace sgpem {
{
public:
unsigned int size() const;
const sgpem::DynamicSchedulable* get_item_at(const unsigned int&) const;
const sgpem::Schedulable* get_item_at(const unsigned int&) const;
void swap(unsigned int positionA, unsigned int positionB) throw();
private:
@ -163,36 +175,15 @@ namespace sgpem {
~SchedulableQueue();
}; //~ class Schedulable
// ---------------------------------------------
class DynamicSchedulable
{
public:
enum state
{
state_running = 1<<0,
state_ready = 1<<1,
state_blocked = 1<<2,
state_future = 1<<3,
state_terminated = 1<<4
// ---------------------------------------------
class Scheduler {
public:
sgpem::Policy& get_policy();
static sgpem::Scheduler& get_instance();
sgpem::SchedulableQueue* get_ready_queue();
private:
Scheduler();
~Scheduler();
};
DynamicSchedulable(const DynamicSchedulable& obj);
int get_cpu_time_left() const;
int get_last_scheduled() const;
state get_state() const;
const sgpem::StaticSchedulable* get_schedulable() const;
};
// ---------------------------------------------
class Scheduler {
public:
sgpem::Policy& get_policy();
static sgpem::Scheduler& get_instance();
sgpem::SchedulableQueue* get_ready_queue();
private:
Scheduler();
~Scheduler();
};
} //~ namespace sgpem