basetask.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "basetask.h"
  2. #include <fstream>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <cstdlib>
  6. using namespace std;
  7. #define esta(e, X) ((X).find(e) != (X).end())
  8. map<string, ptski> task_defs;
  9. vector<TaskBase*> tasks;
  10. vector<ptsk> tasks_load(const char* filename) {
  11. vector<ptsk> ts(0);
  12. ifstream f(filename);
  13. string s; int l = 0;
  14. unsigned int starttm = 0;
  15. unsigned int deadline = 0;
  16. while(getline(f, s)) { l++;
  17. //Salteo comentarios o líneas en blanco
  18. if (s == "" || s[0] == '#') continue;
  19. istringstream iss(s);
  20. //Ready time
  21. if (s[0] == '@') {
  22. char c; iss >> c;
  23. iss >> starttm;
  24. continue;
  25. }
  26. //Deadline time
  27. if (s[0] == '$') {
  28. char c; iss >> c;
  29. iss >> deadline;
  30. continue;
  31. }
  32. int times = 1;
  33. if (s[0] == '*') {
  34. char c; iss >> c;
  35. iss >> times;
  36. if (times<=0) { cerr << "WARNING: '*n' should have a positive number n." << endl; times = 1; }
  37. }
  38. string nom = "";
  39. vector<int> params; int x;
  40. if (!(iss >> nom) || !esta(nom, task_defs)) {
  41. cerr << filename << ":" << l << ": ERROR: Unknow task type (" << nom << "): " << s << endl;
  42. exit(1);
  43. }
  44. while (iss >> x) params.push_back(x);
  45. ptski ti = task_defs[nom];
  46. if (ti.second != -1 && ti.second != (int)params.size()) {
  47. cerr << filename << ":" << l << ": ERROR: expected " << ti.second << " parameters but " << params.size() << " found: " << s << endl;
  48. exit(1);
  49. }
  50. for(int j=0; j<times; j++) ts.push_back(ptsk(ti.first, params, starttm,deadline));
  51. }
  52. return ts;
  53. }
  54. ptsk::ptsk(TaskBase* vtsk, const std::vector<int>& vprms, unsigned int vstart, unsigned int vend) : tsk(vtsk), prms(vprms), start(vstart), end(vend) {}
  55. ptsk::ptsk(void) {}