Go to the documentation of this file.00001 #ifndef __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP
00002 #define __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP
00003
00004
00005
00006
00007
00008 #include <string>
00009
00010 #include <stdair/command/CmdAbstract.hpp>
00011
00012 #include <airsched/AIRSCHED_Types.hpp>
00013 #include <airsched/basic/BasParserTypes.hpp>
00014 #include <airsched/bom/FlightPeriodStruct.hpp>
00015
00016
00017 namespace stdair {
00018 class BomRoot;
00019 }
00020
00021 namespace AIRSCHED {
00022
00023 namespace ScheduleParserHelper {
00024
00025
00026
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 storeBoardingTime : public ParserSemanticAction {
00095 storeBoardingTime (FlightPeriodStruct&);
00097 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00098 };
00099
00101 struct storeOffTime : public ParserSemanticAction {
00103 storeOffTime (FlightPeriodStruct&);
00105 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00106 };
00107
00109 struct storeElapsedTime : public ParserSemanticAction {
00111 storeElapsedTime (FlightPeriodStruct&);
00113 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00114 };
00115
00117 struct storeLegCabinCode : public ParserSemanticAction {
00119 storeLegCabinCode (FlightPeriodStruct&);
00121 void operator() (char iChar) const;
00122 };
00123
00125 struct storeCapacity : public ParserSemanticAction {
00127 storeCapacity (FlightPeriodStruct&);
00129 void operator() (double iReal) const;
00130 };
00131
00136 struct storeSegmentSpecificity : public ParserSemanticAction {
00138 storeSegmentSpecificity (FlightPeriodStruct&);
00140 void operator() (char iChar) const;
00141 };
00142
00144 struct storeSegmentBoardingPoint : public ParserSemanticAction {
00146 storeSegmentBoardingPoint (FlightPeriodStruct&);
00148 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00149 };
00150
00152 struct storeSegmentOffPoint : public ParserSemanticAction {
00154 storeSegmentOffPoint (FlightPeriodStruct&);
00156 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00157 };
00158
00160 struct storeSegmentCabinCode : public ParserSemanticAction {
00162 storeSegmentCabinCode (FlightPeriodStruct&);
00164 void operator() (char iChar) const;
00165 };
00166
00168 struct storeClasses : public ParserSemanticAction {
00170 storeClasses (FlightPeriodStruct&);
00172 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00173 };
00174
00176 struct storeFamilyCode : public ParserSemanticAction {
00178 storeFamilyCode (FlightPeriodStruct&);
00180 void operator() (int iCode) const;
00181 };
00182
00184 struct storeFClasses : public ParserSemanticAction {
00186 storeFClasses (FlightPeriodStruct&);
00188 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00189 };
00190
00192 struct doEndFlight : public ParserSemanticAction {
00194 doEndFlight (stdair::BomRoot&, FlightPeriodStruct&);
00196 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00198 stdair::BomRoot& _bomRoot;
00199 };
00200
00201
00203
00204
00205
00207
00249 struct FlightPeriodParser :
00250 public boost::spirit::classic::grammar<FlightPeriodParser> {
00251
00252 FlightPeriodParser (stdair::BomRoot&, FlightPeriodStruct&);
00253
00254 template <typename ScannerT>
00255 struct definition {
00256 definition (FlightPeriodParser const& self);
00257
00258
00259 boost::spirit::classic::rule<ScannerT> flight_period_list, flight_period,
00260 not_to_be_parsed, flight_period_end, flight_key, airline_code,
00261 flight_number, date, dow, time, date_offset,
00262 leg, leg_key, leg_details, leg_cabin_details,
00263 segment_section, segment_key, full_segment_cabin_details,
00264 segment_cabin_details, full_family_cabin_details,
00265 family_cabin_details, generic_segment, specific_segment_list;
00266
00268 boost::spirit::classic::rule<ScannerT> const& start() const;
00269 };
00270
00271
00272 stdair::BomRoot& _bomRoot;
00273 FlightPeriodStruct& _flightPeriod;
00274 };
00275
00276 }
00281
00282
00283
00284
00286
00291 class FlightPeriodFileParser : public stdair::CmdAbstract {
00292 public:
00294 FlightPeriodFileParser (stdair::BomRoot& ioBomRoot,
00295 const stdair::Filename_T& iFilename);
00296
00298 bool generateInventories ();
00299
00300 private:
00302 void init();
00303
00304 private:
00305
00307 stdair::Filename_T _filename;
00308
00310 iterator_t _startIterator;
00311
00313 iterator_t _endIterator;
00314
00316 stdair::BomRoot& _bomRoot;
00317
00319 FlightPeriodStruct _flightPeriod;
00320 };
00321
00322 }
00323 #endif // __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP