Commit ab842a737cef35b8423a67b5742b388c73d83e57

Authored by Benjamin Renard
1 parent 4de2b52c

Optimize ttcat_to_param process

Showing 1 changed file with 19 additions and 4 deletions   Show diff stats
src/ExternLib/ttcat_to_param/TTCatToParam.hh
... ... @@ -19,6 +19,10 @@
19 19 namespace AMDA {
20 20 namespace Parameters {
21 21  
  22 +bool compareInterval(TimeTableCatalog::TimeInterval i1, TimeTableCatalog::TimeInterval i2) {
  23 + return (i1._startTime < i2._startTime);
  24 +}
  25 +
22 26 /**
23 27 * @class TTCatToParam
24 28 * @brief Convert a time table or a catalog to a parameter.
... ... @@ -35,6 +39,8 @@ public:
35 39 _paramOutput(new ParamDataScalaireDouble()),
36 40 _intervals(intervals), _paramName(paramName), _paramComp(paramComp) {
37 41 _paramDataOutput=_paramOutput;
  42 + std::sort(_intervals.begin(), _intervals.end(), compareInterval);
  43 + _crtIt = _intervals.begin();
38 44 }
39 45  
40 46 /**
... ... @@ -45,15 +51,23 @@ public:
45 51 for (unsigned int index = pParamDataIndexInfo._startIndex;
46 52 index< pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess; index++) {
47 53 double crtTime = _paramInput.getTime(index);
48   - _paramOutput->getDataList().push_back(getValue(crtTime));
49   - _paramOutput->pushTime(crtTime);
  54 + double value = getValue(crtTime);
  55 + if (!isNAN(value)) {
  56 + _paramOutput->getDataList().push_back(getValue(crtTime));
  57 + _paramOutput->pushTime(crtTime);
  58 + }
50 59 }
51 60 }
52 61  
53 62 double getValue(double time) {
54   - for(std::vector<TimeTableCatalog::TimeInterval>::iterator it = _intervals.begin(); it != _intervals.end(); ++it) {
55   - if ((time < it->_startTime) || (time > it->_stopTime))
  63 + for(std::vector<TimeTableCatalog::TimeInterval>::iterator it = _crtIt; it != _intervals.end(); ++it) {
  64 + _crtIt = it;
  65 + if (time < it->_startTime) {
  66 + return NAN;
  67 + }
  68 + else if (time > it->_stopTime) {
56 69 continue;
  70 + }
57 71 if (_paramName.empty()) {
58 72 return 1.;
59 73 }
... ... @@ -80,6 +94,7 @@ public:
80 94 std::vector<TimeTableCatalog::TimeInterval> _intervals;
81 95 std::string _paramName;
82 96 int _paramComp;
  97 + std::vector<TimeTableCatalog::TimeInterval>::iterator _crtIt;
83 98 };
84 99  
85 100 } /* namespace Parameters */
... ...