$treeview $search $mathjax
00001 #ifndef __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP 00002 #define __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP 00003 00004 // ////////////////////////////////////////////////////////////////////// 00005 // Import section 00006 // ////////////////////////////////////////////////////////////////////// 00007 // STL 00008 #include <string> 00009 // StdAir 00010 #include <stdair/command/CmdAbstract.hpp> 00011 // AirTSP 00012 #include <airtsp/AIRTSP_Types.hpp> 00013 #include <airtsp/basic/BasParserTypes.hpp> 00014 #include <airtsp/bom/FlightPeriodStruct.hpp> 00015 00016 // Forward declarations 00017 namespace stdair { 00018 class BomRoot; 00019 } 00020 00021 namespace AIRTSP { 00022 00023 namespace ScheduleParserHelper { 00024 00025 // /////////////////////////////////////////////////////////////////// 00026 // Semantic actions 00027 // /////////////////////////////////////////////////////////////////// 00029 struct ParserSemanticAction { 00031 ParserSemanticAction (FlightPeriodStruct&); 00033 FlightPeriodStruct& _flightPeriod; 00034 }; 00035 00037 struct storeAirlineCode : public ParserSemanticAction { 00039 storeAirlineCode (FlightPeriodStruct&); 00041 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00042 }; 00043 00045 struct storeFlightNumber : public ParserSemanticAction { 00047 storeFlightNumber (FlightPeriodStruct&); 00049 void operator() (unsigned int iNumber) const; 00050 }; 00051 00053 struct storeDateRangeStart : public ParserSemanticAction { 00055 storeDateRangeStart (FlightPeriodStruct&); 00057 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00058 }; 00059 00061 struct storeDateRangeEnd : public ParserSemanticAction { 00063 storeDateRangeEnd (FlightPeriodStruct&); 00065 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00066 }; 00067 00069 struct storeDow : public ParserSemanticAction { 00071 storeDow (FlightPeriodStruct&); 00073 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00074 }; 00075 00077 struct storeLegBoardingPoint : public ParserSemanticAction { 00079 storeLegBoardingPoint (FlightPeriodStruct&); 00081 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00082 }; 00083 00085 struct storeLegOffPoint : public ParserSemanticAction { 00087 storeLegOffPoint (FlightPeriodStruct&); 00089 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00090 }; 00091 00093 struct storeOperatingAirlineCode : public ParserSemanticAction { 00095 storeOperatingAirlineCode (FlightPeriodStruct&); 00097 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00098 }; 00099 00101 struct storeOperatingFlightNumber : public ParserSemanticAction { 00103 storeOperatingFlightNumber (FlightPeriodStruct&); 00105 void operator() (unsigned int iNumber) const; 00106 }; 00107 00109 struct storeBoardingTime : public ParserSemanticAction { 00111 storeBoardingTime (FlightPeriodStruct&); 00113 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00114 }; 00115 00117 struct storeOffTime : public ParserSemanticAction { 00119 storeOffTime (FlightPeriodStruct&); 00121 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00122 }; 00123 00125 struct storeElapsedTime : public ParserSemanticAction { 00127 storeElapsedTime (FlightPeriodStruct&); 00129 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00130 }; 00131 00133 struct storeLegCabinCode : public ParserSemanticAction { 00135 storeLegCabinCode (FlightPeriodStruct&); 00137 void operator() (char iChar) const; 00138 }; 00139 00141 struct storeCapacity : public ParserSemanticAction { 00143 storeCapacity (FlightPeriodStruct&); 00145 void operator() (double iReal) const; 00146 }; 00147 00152 struct storeSegmentSpecificity : public ParserSemanticAction { 00154 storeSegmentSpecificity (FlightPeriodStruct&); 00156 void operator() (char iChar) const; 00157 }; 00158 00160 struct storeSegmentBoardingPoint : public ParserSemanticAction { 00162 storeSegmentBoardingPoint (FlightPeriodStruct&); 00164 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00165 }; 00166 00168 struct storeSegmentOffPoint : public ParserSemanticAction { 00170 storeSegmentOffPoint (FlightPeriodStruct&); 00172 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00173 }; 00174 00176 struct storeSegmentCabinCode : public ParserSemanticAction { 00178 storeSegmentCabinCode (FlightPeriodStruct&); 00180 void operator() (char iChar) const; 00181 }; 00182 00184 struct storeClasses : public ParserSemanticAction { 00186 storeClasses (FlightPeriodStruct&); 00188 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00189 }; 00190 00192 struct storeFamilyCode : public ParserSemanticAction { 00194 storeFamilyCode (FlightPeriodStruct&); 00196 void operator() (int iCode) const; 00197 }; 00198 00200 struct storeFRAT5CurveKey : public ParserSemanticAction { 00202 storeFRAT5CurveKey (FlightPeriodStruct&); 00204 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00205 }; 00206 00208 struct storeFFDisutilityCurveKey : public ParserSemanticAction { 00210 storeFFDisutilityCurveKey (FlightPeriodStruct&); 00212 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00213 }; 00214 00216 struct storeFClasses : public ParserSemanticAction { 00218 storeFClasses (FlightPeriodStruct&); 00220 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00221 }; 00222 00224 struct doEndFlight : public ParserSemanticAction { 00226 doEndFlight (stdair::BomRoot&, FlightPeriodStruct&); 00228 void operator() (iterator_t iStr, iterator_t iStrEnd) const; 00230 stdair::BomRoot& _bomRoot; 00231 }; 00232 00233 00235 // 00236 // (Boost Spirit) Grammar Definition 00237 // 00239 00281 struct FlightPeriodParser : 00282 public boost::spirit::classic::grammar<FlightPeriodParser> { 00283 00284 FlightPeriodParser (stdair::BomRoot&, FlightPeriodStruct&); 00285 00286 template <typename ScannerT> 00287 struct definition { 00288 definition (FlightPeriodParser const& self); 00289 00290 // Instantiation of rules 00291 boost::spirit::classic::rule<ScannerT> flight_period_list, flight_period, 00292 not_to_be_parsed, flight_period_end, flight_key, airline_code, 00293 flight_number, date, dow, time, date_offset, 00294 leg, leg_key, operating_leg_details, leg_details, leg_cabin_details, 00295 segment_section, segment_key, full_segment_cabin_details, 00296 segment_cabin_details, full_family_cabin_details, 00297 family_cabin_details, generic_segment, specific_segment_list; 00298 00300 boost::spirit::classic::rule<ScannerT> const& start() const; 00301 }; 00302 00303 // Parser Context 00304 stdair::BomRoot& _bomRoot; 00305 FlightPeriodStruct& _flightPeriod; 00306 }; 00307 00308 } 00313 00314 // 00315 // Entry class for the file parser 00316 // 00318 00323 class FlightPeriodFileParser : public stdair::CmdAbstract { 00324 public: 00326 FlightPeriodFileParser (stdair::BomRoot& ioBomRoot, 00327 const stdair::Filename_T& iFilename); 00328 00330 bool generateInventories (); 00331 00332 private: 00334 void init(); 00335 00336 private: 00337 // Attributes 00339 stdair::Filename_T _filename; 00340 00342 iterator_t _startIterator; 00343 00345 iterator_t _endIterator; 00346 00348 stdair::BomRoot& _bomRoot; 00349 00351 FlightPeriodStruct _flightPeriod; 00352 }; 00353 00354 } 00355 #endif // __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP