$treeview $search $mathjax
AirInv Logo  1.00.1
$projectbrief
$projectbrief
$searchbox

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 storeOperatingAirlineCode : public ParserSemanticAction {
00095       storeOperatingAirlineCode (FlightPeriodStruct&);
00097       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00098     };
00099   
00101     struct storeOperatingFlightNumber : public ParserSemanticAction {
00103       storeOperatingFlightNumber (FlightPeriodStruct&);
00105       void operator() (unsigned int iNumber) const;
00106     };
00107 
00109     struct storeBoardingTime : public ParserSemanticAction {
00111       storeBoardingTime (FlightPeriodStruct&);
00113       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00114     };
00115 
00117     struct storeOffTime : public ParserSemanticAction {
00119       storeOffTime (FlightPeriodStruct&);
00121       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00122     };
00123 
00125     struct storeElapsedTime : public ParserSemanticAction {
00127       storeElapsedTime (FlightPeriodStruct&);
00129       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00130     };
00131 
00133     struct storeLegCabinCode : public ParserSemanticAction {
00135       storeLegCabinCode (FlightPeriodStruct&);
00137       void operator() (char iChar) const;
00138     };
00139   
00141     struct storeCapacity : public ParserSemanticAction {
00143       storeCapacity (FlightPeriodStruct&);
00145       void operator() (double iReal) const;
00146     };
00147   
00152     struct storeSegmentSpecificity : public ParserSemanticAction {
00154       storeSegmentSpecificity (FlightPeriodStruct&);
00156       void operator() (char iChar) const;
00157     };
00158   
00160     struct storeSegmentBoardingPoint : public ParserSemanticAction {
00162       storeSegmentBoardingPoint (FlightPeriodStruct&);
00164       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00165     };
00166   
00168     struct storeSegmentOffPoint : public ParserSemanticAction {
00170       storeSegmentOffPoint (FlightPeriodStruct&);
00172       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00173     };
00174 
00176     struct storeSegmentCabinCode : public ParserSemanticAction {
00178       storeSegmentCabinCode (FlightPeriodStruct&);
00180       void operator() (char iChar) const;
00181     };
00182   
00184     struct storeClasses : public ParserSemanticAction {
00186       storeClasses (FlightPeriodStruct&);
00188       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00189     };
00190 
00192     struct storeFamilyCode : public ParserSemanticAction {
00194       storeFamilyCode (FlightPeriodStruct&);
00196       void operator() (int iCode) const;
00197     };
00198   
00200     struct storeFRAT5CurveKey : public ParserSemanticAction {
00202       storeFRAT5CurveKey (FlightPeriodStruct&);
00204       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00205     };
00206   
00208     struct storeFFDisutilityCurveKey : public ParserSemanticAction {
00210       storeFFDisutilityCurveKey (FlightPeriodStruct&);
00212       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00213     };
00214 
00216     struct storeFClasses : public ParserSemanticAction {
00218       storeFClasses (FlightPeriodStruct&);
00220       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00221     };
00222       
00224     struct doEndFlight : public ParserSemanticAction {
00226       doEndFlight (stdair::BomRoot&, FlightPeriodStruct&);
00228       void operator() (iterator_t iStr, iterator_t iStrEnd) const;
00230       stdair::BomRoot& _bomRoot;
00231     };
00232   
00233 
00235     //
00236     //  (Boost Spirit) Grammar Definition
00237     //
00239 
00282     struct FlightPeriodParser : 
00283       public boost::spirit::classic::grammar<FlightPeriodParser> {
00284 
00285       FlightPeriodParser (stdair::BomRoot&, FlightPeriodStruct&);
00286 
00287       template <typename ScannerT>
00288       struct definition {
00289         definition (FlightPeriodParser const& self);
00290 
00291         // Instantiation of rules
00292         boost::spirit::classic::rule<ScannerT> flight_period_list,
00293           not_to_be_parsed, flight_period, flight_period_end,
00294           flight_key, airline_code, flight_number,
00295           date, dow, time, date_offset,
00296           leg, leg_key, operating_leg_details, leg_details, leg_cabin_details,
00297           segment_section, segment_key, full_segment_cabin_details,
00298           segment_cabin_details, full_family_cabin_details,
00299           family_cabin_details, generic_segment, specific_segment_list;
00300 
00302         boost::spirit::classic::rule<ScannerT> const& start() const;
00303       };
00304 
00305       // Parser Context
00306       stdair::BomRoot& _bomRoot;
00307       FlightPeriodStruct& _flightPeriod;
00308     };
00309 
00310   }
00315 
00316   //
00317   //  Entry class for the file parser
00318   //
00320 
00325   class FlightPeriodFileParser : public stdair::CmdAbstract {
00326   public:
00328     FlightPeriodFileParser (stdair::BomRoot& ioBomRoot,
00329                             const stdair::Filename_T& iFilename);
00330 
00332     bool generateInventories ();
00333       
00334   private:
00336     void init();
00337       
00338   private:
00339     // Attributes
00341     stdair::Filename_T _filename;
00342 
00344     iterator_t _startIterator;
00345       
00347     iterator_t _endIterator;
00348       
00350     stdair::BomRoot& _bomRoot;
00351 
00353     FlightPeriodStruct _flightPeriod;
00354   };
00355     
00356 }
00357 #endif // __AIRINV_CMD_SCHEDULEPARSERHELPER_HPP