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
00011 #include <stdair/command/CmdAbstract.hpp>
00012
00013 #include <airsched/AIRSCHED_Types.hpp>
00014 #include <airsched/basic/BasParserTypes.hpp>
00015 #include <airsched/bom/FlightPeriodStruct.hpp>
00016
00017
00018 namespace stdair {
00019 class BomRoot;
00020 }
00021
00022 namespace AIRSCHED {
00023
00024 namespace ScheduleParserHelper {
00025
00026
00027
00028
00030 struct ParserSemanticAction {
00032 ParserSemanticAction (FlightPeriodStruct&);
00034 FlightPeriodStruct& _flightPeriod;
00035 };
00036
00038 struct storeAirlineCode : public ParserSemanticAction {
00040 storeAirlineCode (FlightPeriodStruct&);
00042 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00043 };
00044
00046 struct storeFlightNumber : public ParserSemanticAction {
00048 storeFlightNumber (FlightPeriodStruct&);
00050 void operator() (unsigned int iNumber) const;
00051 };
00052
00054 struct storeDateRangeStart : public ParserSemanticAction {
00056 storeDateRangeStart (FlightPeriodStruct&);
00058 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00059 };
00060
00062 struct storeDateRangeEnd : public ParserSemanticAction {
00064 storeDateRangeEnd (FlightPeriodStruct&);
00066 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00067 };
00068
00070 struct storeDow : public ParserSemanticAction {
00072 storeDow (FlightPeriodStruct&);
00074 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00075 };
00076
00078 struct storeLegBoardingPoint : public ParserSemanticAction {
00080 storeLegBoardingPoint (FlightPeriodStruct&);
00082 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00083 };
00084
00086 struct storeLegOffPoint : public ParserSemanticAction {
00088 storeLegOffPoint (FlightPeriodStruct&);
00090 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00091 };
00092
00094 struct storeBoardingTime : public ParserSemanticAction {
00096 storeBoardingTime (FlightPeriodStruct&);
00098 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00099 };
00100
00102 struct storeOffTime : public ParserSemanticAction {
00104 storeOffTime (FlightPeriodStruct&);
00106 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00107 };
00108
00110 struct storeElapsedTime : public ParserSemanticAction {
00112 storeElapsedTime (FlightPeriodStruct&);
00114 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00115 };
00116
00118 struct storeLegCabinCode : public ParserSemanticAction {
00120 storeLegCabinCode (FlightPeriodStruct&);
00122 void operator() (char iChar) const;
00123 };
00124
00126 struct storeCapacity : public ParserSemanticAction {
00128 storeCapacity (FlightPeriodStruct&);
00130 void operator() (double iReal) const;
00131 };
00132
00137 struct storeSegmentSpecificity : public ParserSemanticAction {
00139 storeSegmentSpecificity (FlightPeriodStruct&);
00141 void operator() (char iChar) const;
00142 };
00143
00145 struct storeSegmentBoardingPoint : public ParserSemanticAction {
00147 storeSegmentBoardingPoint (FlightPeriodStruct&);
00149 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00150 };
00151
00153 struct storeSegmentOffPoint : public ParserSemanticAction {
00155 storeSegmentOffPoint (FlightPeriodStruct&);
00157 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00158 };
00159
00161 struct storeSegmentCabinCode : public ParserSemanticAction {
00163 storeSegmentCabinCode (FlightPeriodStruct&);
00165 void operator() (char iChar) const;
00166 };
00167
00169 struct storeClasses : public ParserSemanticAction {
00171 storeClasses (FlightPeriodStruct&);
00173 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00174 };
00175
00177 struct storeFamilyCode : public ParserSemanticAction {
00179 storeFamilyCode (FlightPeriodStruct&);
00181 void operator() (int iCode) const;
00182 };
00183
00185 struct storeFClasses : public ParserSemanticAction {
00187 storeFClasses (FlightPeriodStruct&);
00189 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00190 };
00191
00193 struct doEndFlight : public ParserSemanticAction {
00195 doEndFlight (stdair::BomRoot&, FlightPeriodStruct&);
00197 void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00199 stdair::BomRoot& _bomRoot;
00200 };
00201
00202
00204
00205
00206
00208
00250 struct FlightPeriodParser :
00251 public boost::spirit::classic::grammar<FlightPeriodParser> {
00252
00253 FlightPeriodParser (stdair::BomRoot&, FlightPeriodStruct&);
00254
00255 template <typename ScannerT>
00256 struct definition {
00257 definition (FlightPeriodParser const& self);
00258
00259
00260 boost::spirit::classic::rule<ScannerT> flight_period_list, flight_period,
00261 flight_period_end, 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 // __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP