AirSched Logo  0.1.2
C++ Simulated Airline Schedule Manager Library
ScheduleParserHelper.hpp
Go to the documentation of this file.
00001 #ifndef __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP
00002 #define __AIRSCHED_CMD_SCHEDULEPARSERHELPER_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <string>
00009 // #define BOOST_SPIRIT_DEBUG
00010 // StdAir
00011 #include <stdair/command/CmdAbstract.hpp>
00012 // AirSched
00013 #include <airsched/AIRSCHED_Types.hpp>
00014 #include <airsched/basic/BasParserTypes.hpp>
00015 #include <airsched/bom/FlightPeriodStruct.hpp>
00016 
00017 // Forward declarations
00018 namespace stdair {
00019   class BomRoot;
00020 }
00021 
00022 namespace AIRSCHED {
00023 
00024   namespace ScheduleParserHelper {
00025     
00026     // ///////////////////////////////////////////////////////////////////
00027     //  Semantic actions
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     //  (Boost Spirit) Grammar Definition
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         // Instantiation of rules
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       // Parser Context
00273       stdair::BomRoot& _bomRoot;
00274       FlightPeriodStruct& _flightPeriod;
00275     };
00276 
00277   }
00282 
00283   //
00284   //  Entry class for the file parser
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     // Attributes
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