Go to the documentation of this file.00001 #ifndef __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP
00002 #define __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP
00003
00004
00005
00006
00007
00008 #include <string>
00009
00010 #include <stdair/command/CmdAbstract.hpp>
00011
00012 #include <airinv/AIRINV_Types.hpp>
00013 #include <airinv/basic/BasParserTypes.hpp>
00014 #include <airinv/bom/FlightPeriodStruct.hpp>
00015
00016
00017 namespace stdair {
00018 class BomRoot;
00019 }
00020
00021 namespace AIRINV {
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,
00260 not_to_be_parsed, flight_period, flight_period_end,
00261 flight_key, airline_code, flight_number,
00262 date, dow, time, date_offset,
00263 leg, leg_key, leg_details, leg_cabin_details,
00264 segment_section, segment_key, full_segment_cabin_details,
00265 segment_cabin_details, full_family_cabin_details,
00266 family_cabin_details, generic_segment, specific_segment_list;
00267
00269 boost::spirit::classic::rule<ScannerT> const& start() const;
00270 };
00271
00272
00273 stdair::BomRoot& _bomRoot;
00274 FlightPeriodStruct& _flightPeriod;
00275 };
00276
00277 }
00282
00283
00284
00285
00287
00292 class FlightPeriodFileParser : public stdair::CmdAbstract {
00293 public:
00295 FlightPeriodFileParser (stdair::BomRoot& ioBomRoot,
00296 const stdair::Filename_T& iFilename);
00297
00299 bool generateInventories ();
00300
00301 private:
00303 void init();
00304
00305 private:
00306
00308 stdair::Filename_T _filename;
00309
00311 iterator_t _startIterator;
00312
00314 iterator_t _endIterator;
00315
00317 stdair::BomRoot& _bomRoot;
00318
00320 FlightPeriodStruct _flightPeriod;
00321 };
00322
00323 }
00324 #endif // __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP