AirInv Logo  0.1.2
C++ Simulated Airline Inventory Management System library
ScheduleParserHelper.hpp
Go to the documentation of this file.
00001 #ifndef __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP
00002 #define __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <string>
00009 // StdAir
00010 #include <stdair/command/CmdAbstract.hpp>
00011 // Airinv
00012 #include <airinv/AIRINV_Types.hpp>
00013 #include <airinv/basic/BasParserTypes.hpp>
00014 #include <airinv/bom/FlightPeriodStruct.hpp>
00015 
00016 // Forward declarations
00017 namespace stdair {
00018   class BomRoot;
00019 }
00020 
00021 namespace AIRINV {
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 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     //  (Boost Spirit) Grammar Definition
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         // Instantiation of rules
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       // 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 // __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines