From b3ba006800e4e24bcfb25bf8d4a2cda70c590f1d Mon Sep 17 00:00:00 2001 From: tchernobog Date: Mon, 20 Feb 2006 19:10:16 +0000 Subject: [PATCH] - Rewrite sgpem module interface file with adapter methods git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@360 3ecf2c5c-341e-0410-92b4-d18e462d057c --- ChangeLog | 80 +++++++++ src/backend/policy_parameters.hh | 5 +- src/backend/sgpem.i | 267 ++++++++++++++++--------------- 3 files changed, 225 insertions(+), 127 deletions(-) diff --git a/ChangeLog b/ChangeLog index 77a70ef..7b4b959 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,83 @@ +2006-02-20 00:12 tchernobog + + * trunk/Makefile.am, trunk/config/Doxyfile.in: - Change order on + which the libraries are listed for installation in the makefile, + thus workarounding a nasty automake bug. This problem is reported + here: http://sourceware.org/ml/automake/2004-03/msg00113.html + http://sources.redhat.com/ml/automake/2004-01/msg00171.html ... + but it doesn't seem to have been solved thus far. + +2006-02-19 22:36 tchernobog + + * trunk/src/backend/history.cc, trunk/src/backend/history.hh, + trunk/src/backend/observed_subject.cc, + trunk/src/backend/observed_subject.hh, + trunk/src/backend/policy.cc, trunk/src/backend/policy.hh, + trunk/src/backend/policy_manager.cc, + trunk/src/backend/policy_manager.hh, + trunk/src/backend/policy_parameters.cc, + trunk/src/backend/policy_parameters.hh, + trunk/src/backend/process.cc, trunk/src/backend/process.hh, + trunk/src/backend/pyloader/python_policy.cc, + trunk/src/backend/pyloader/python_policy.hh, + trunk/src/backend/pyloader/python_policy_manager.cc, + trunk/src/backend/pyloader/python_policy_manager.hh, + trunk/src/backend/schedulable.cc, + trunk/src/backend/schedulable.hh, + trunk/src/backend/schedulable_list.cc, + trunk/src/backend/schedulable_list.hh, + trunk/src/backend/schedulable_status.cc, + trunk/src/backend/schedulable_status.hh, + trunk/src/backend/scheduler.cc, trunk/src/backend/scheduler.hh, + trunk/src/backend/slice.cc, trunk/src/backend/slice.hh, + trunk/src/backend/string_utils.cc, + trunk/src/backend/string_utils.hh, + trunk/src/graphical_simulation.hh, + trunk/src/graphical_terminal_io.cc, + trunk/src/graphical_terminal_io.hh, trunk/src/io_manager.hh, + trunk/src/main.cc, trunk/src/main.hh, trunk/src/main_window.cc, + trunk/src/main_window.hh, trunk/src/observer.cc, + trunk/src/observer.hh, trunk/src/parse_opts.cc, + trunk/src/parse_opts.hh, trunk/src/simulation.cc, + trunk/src/simulation.hh, trunk/src/standard_io.cc, + trunk/src/standard_io.hh, trunk/src/start_gui.cc, + trunk/src/start_gui.hh, trunk/src/templates/smartp.hh, + trunk/src/text_simulation.cc, trunk/src/text_simulation.hh: - Add + newlines at the end of source files. I hope not having to do this + frequently! (it's a two-liner script, but nevertheless...) + +2006-02-19 22:25 tchernobog + + * trunk/Makefile.am, trunk/src/backend/pyloader/Policy.py, + trunk/src/backend/sgpem.i: - Add first draft of SWIG interface + file, and create Python loadable module. However, please note + that: - All the methods accepting a Glib::ustring should not be + exported, instead they should be replaced by wrapper functions + accepting PyObject*. - The same thing applies to every other + method accepting a ``non built-in'' data type - Return types + should probably be wrapped, too - It may be a good idea to + implement wrapper methods that print out the content of a C++ + object, so that a Python user can do a simple "print schedStat". + This is achieved by adding a "__str__()" method to the class. See + the SWIG manual for further infos about returning const char* + values. + +2006-02-19 16:22 tchernobog + + * trunk/src/backend/pyloader/Abstract.py, + trunk/src/backend/pyloader/Policy.py: - Fix documentation for + Python Abstract module + +2006-02-19 15:49 tchernobog + + * trunk/ChangeLog, trunk/configure.ac: - Change version number for + first milestone release + +2006-02-19 14:54 tchernobog + + * trunk/README: - Add some temporary infos about how to perform the + build process. + 2006-02-19 14:34 tchernobog * trunk/ChangeLog, trunk/Makefile.am, trunk/configure.ac, diff --git a/src/backend/policy_parameters.hh b/src/backend/policy_parameters.hh index b6b7536..a9847bb 100644 --- a/src/backend/policy_parameters.hh +++ b/src/backend/policy_parameters.hh @@ -30,9 +30,10 @@ namespace sgpem { - class PolicyParametersException : public std::runtime_error { + class PolicyParametersException : public std::runtime_error + { public: - PolicyParametersException(char* msg): std::runtime_error(msg) {} + PolicyParametersException(char* msg): std::runtime_error(msg) {} }; class PolicyParameters; diff --git a/src/backend/sgpem.i b/src/backend/sgpem.i index 698761e..77ce45b 100644 --- a/src/backend/sgpem.i +++ b/src/backend/sgpem.i @@ -1,5 +1,6 @@ %module sgpem %{ +#include "policy.hh" #include "policy_parameters.hh" #include "schedulable.hh" #include "schedulable_list.hh" @@ -8,137 +9,153 @@ namespace sgpem { - // -------------------------------------------- - class PolicyParametersException : public std::runtime_error { - public: - PolicyParametersException(char* msg): std::runtime_error(msg); - }; //~ class PolicyParametersException + class Policy { + public: + virtual ~Policy() = 0; + const PolicyParameters& get_parameters() const; + }; + + // -------------------------------------------- + class PolicyParametersException : public std::runtime_error { + public: + PolicyParametersException(char* msg); + %rename (__str__) what(); + }; //~ class PolicyParametersException - // -------------------------------------------- - class PolicyParameters - { - public: - template - class Parameter; - - //methods to CREATE PARAMETERS - void register_int(Glib::ustring name, - const int& lower_bound, - const int& upper_bound, - const bool& required, - const int& default_value = 0); - - void register_float(Glib::ustring name, - const float& lower_bound, - const float& upper_bound, - const bool& required, - const float& default_value = 0.0f); - - void register_string(Glib::ustring name, - const bool& required, - const Glib::ustring& default_value = ""); - - void clear(); - - //methods to RETRIEVE CREATED PARAMETERS - std::map > get_registered_int_parameters() const; - std::map > get_registered_float_parameters() const; - std::map > get_registered_string_parameters() const; - - //methods to SET the VALUE of PARAMETERS - bool set_int(Glib::ustring name, const int& value); - bool set_float(Glib::ustring name, const float& value); - bool set_string(Glib::ustring name, const Glib::ustring& value); - - //methods to GET the VALUE of PARAMETERS - int get_int(Glib::ustring name) const; - float get_float(Glib::ustring name) const; - Glib::ustring get_string(Glib::ustring name) const; - }; //~ class PolicyParameters - - // -------------------------------------------- - template - class PolicyParameters::Parameter - { - public: - Parameter(Glib::ustring name, - const T& value, - const T& lower_bound, - const T& upper_bound, - const bool& required, - const T& default_value = 0); - - Glib::ustring get_name() const; - T get_lower_bound() const; - T get_upper_bound() const; - bool is_required() const; - T get_default() const; - T get_value() const; - void set_value(const T&); - }; //~ class PolicyParameters::Parameter<> + // -------------------------------------------- + class PolicyParameters + { + public: + //methods to CREATE PARAMETERS + // (rewrapped correctly for SWIG usage) + %ignore register_int(const Glib::ustring&, const int&, + const int&, const bool&, const int&); + %ignore register_float(const Glib::ustring&, const float&, + const float&, const bool&, const float&); + %ignore register_string(const Glib::ustring&, const bool&, + const char*); - // -------------------------------------------- - class Schedulable - { - public: - Schedulable(const Glib::ustring& name, - const unsigned int& arrival, - const unsigned int& total, - const int& priority); - virtual ~Schedulable() = 0; - - virtual unsigned int get_arrival_time() const; - unsigned int get_total_cpu_time() const; - int get_priority() const; - Glib::ustring get_name() const; - virtual Glib::ustring get_type() const = 0; - }; //~ class Schedulable + %extend { + void register_int(const char* name, + const int& lower_bound, + const int& upper_bound, + const bool& required, + const int& default_value = 0) + { + self->register_int(Glib::ustring(name), + lower_bound, upper_bound, + required, default_value); + } + + void register_float(const char* name, + const float& lower_bound, + const float& upper_bound, + const bool& required, + const float& default_value = 0.0f) + { + self->register_float(Glib::ustring(name), + lower_bound, upper_bound, + required, default_value); + } + + void register_string(const char* name, + const bool& required, + const char* default_value = "") + { + self->register_string(Glib::ustring(name), + required, + Glib::ustring(default_value)); + } + } + + //methods to SET the VALUE of PARAMETERS + // (rewrapped correctly for SWIG usage) + %ignore set_int(const Glib::ustring&, const int&); + %ignore set_float(const Glib::ustring&, const float&); + %ignore set_string(const Glib::ustring&, const Glib::ustring&); + + %extend { + bool set_int(const char* name, const int& value) + { return self->set_int(Glib::ustring(name), value); } + bool set_float(const char* name, const float& value) + { return self->set_float(Glib::ustring(name), value); } + bool set_string(const char* name, const char* value) + { return self->set_string(Glib::ustring(name), value); } + } + + //methods to GET the VALUE of PARAMETERS + // (rewrapped correctly for SWIG usage) + %ignore get_int(const Glib::ustring&) const; + %ignore get_float(const Glib::ustring&) const; + %ignore get_string(const Glib::ustring&) const; + + %extend { + int get_int(const char* name) const + { return self->get_int(Glib::ustring(name)); } + float get_float(const char* name) const + { return self->get_float(Glib::ustring(name)); } + const char* get_string(const char* name) const + { return self->get_string(Glib::ustring(name)).c_str(); } + } + + }; //~ class PolicyParameters + + // -------------------------------------------- + class Schedulable + { + public: + virtual ~Schedulable() = 0; + + virtual unsigned int get_arrival_time() const; + int get_priority() const; + unsigned int get_total_cpu_time() const; + + %ignore get_name() const; + %extend { + const char* get_name() const + { return self->get_name().c_str(); } + } + }; //~ class Schedulable - // -------------------------------------------- - class SchedulableList - { - public: - SchedulableList(); - - bool operator==(const SchedulableList&) const; - bool has_same_objects(const SchedulableList& dx) const; - sgpem::SchedulableStatus* top(); - sgpem::SchedulableStatus* bottom(); - void add_at_bottom(const sgpem::SchedulableStatus&); - void add_at_top(const sgpem::SchedulableStatus&); - memory::smart_ptr remove(const uint& position); - bool insert_at(const uint&, const uint&); - uint size() const; - SchedulableStatus* get_item_at(const uint&); - const SchedulableStatus* get_item_at(const uint&) const; - void clear(); - }; //~ class Schedulable + // -------------------------------------------- + class SchedulableList + { + public: + sgpem::SchedulableStatus* top(); + sgpem::SchedulableStatus* bottom(); + bool insert_at(const uint&, const uint&); + uint size() const; + SchedulableStatus* get_item_at(const uint&); + const SchedulableStatus* get_item_at(const uint&) const; + + private: + // Avoid instantiation and copy + SchedulableList(); + SchedulableList(const SchedulableList& ); + }; //~ class Schedulable - // --------------------------------------------- - class SchedulableStatus - { - public: - enum state - { - state_running, - state_ready, - state_blocked, - state_future, - state_terminated - }; + // --------------------------------------------- + class SchedulableStatus + { + public: + enum state + { + state_running, + state_ready, + state_blocked, + state_future, + state_terminated + }; - SchedulableStatus(const Schedulable& obj); - bool operator==(const SchedulableStatus&) const; - - int get_cpu_time_left() const; - void give_cpu_time(const int& time); - void set_last_scheduled(const int& time); - int get_last_scheduled() const; - state get_state() const; - void set_state(state s); - const Schedulable* get_schedulable() const; - }; + SchedulableStatus(const SchedulableStatus& obj); + + int get_cpu_time_left() const; + void give_cpu_time(const int& time); + int get_last_scheduled() const; + state get_state() const; + const Schedulable* get_schedulable() const; + }; } //~ namespace sgpem