$treeview $search $mathjax
AirTSP Logo  1.01.2
$projectbrief
$projectbrief
$searchbox

ScheduleParserHelper.hpp

Go to the documentation of this file.
00001 #ifndef __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP
00002 #define __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <string>
00009 // StdAir
00010 #include <stdair/command/CmdAbstract.hpp>
00011 // AirTSP
00012 #include <airtsp/AIRTSP_Types.hpp>
00013 #include <airtsp/basic/BasParserTypes.hpp>
00014 #include <airtsp/bom/FlightPeriodStruct.hpp>
00015 
00016 // Forward declarations
00017 namespace stdair {
00018   class BomRoot;
00019 }
00020 
00021 namespace AIRTSP {
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 
00281     struct FlightPeriodParser : 
00282       public boost::spirit::classic::grammar<FlightPeriodParser> {
00283 
00284       FlightPeriodParser (stdair::BomRoot&, FlightPeriodStruct&);
00285 
00286       template <typename ScannerT>
00287       struct definition {
00288         definition (FlightPeriodParser const& self);
00289 
00290         // Instantiation of rules
00291         boost::spirit::classic::rule<ScannerT> flight_period_list, flight_period,
00292           not_to_be_parsed, flight_period_end, flight_key, airline_code,
00293           flight_number, date, dow, time, date_offset,
00294           leg, leg_key, operating_leg_details, leg_details, leg_cabin_details,
00295           segment_section, segment_key, full_segment_cabin_details,
00296           segment_cabin_details, full_family_cabin_details,
00297           family_cabin_details, generic_segment, specific_segment_list;
00298 
00300         boost::spirit::classic::rule<ScannerT> const& start() const;
00301       };
00302 
00303       // Parser Context
00304       stdair::BomRoot& _bomRoot;
00305       FlightPeriodStruct& _flightPeriod;
00306     };
00307 
00308   }
00313 
00314   //
00315   //  Entry class for the file parser
00316   //
00318 
00323   class FlightPeriodFileParser : public stdair::CmdAbstract {
00324   public:
00326     FlightPeriodFileParser (stdair::BomRoot& ioBomRoot,
00327                             const stdair::Filename_T& iFilename);
00328 
00330     bool generateInventories ();
00331       
00332   private:
00334     void init();
00335       
00336   private:
00337     // Attributes
00339     stdair::Filename_T _filename;
00340 
00342     iterator_t _startIterator;
00343       
00345     iterator_t _endIterator;
00346       
00348     stdair::BomRoot& _bomRoot;
00349 
00351     FlightPeriodStruct _flightPeriod;
00352   };
00353     
00354 }
00355 #endif // __AIRTSP_CMD_SCHEDULEPARSERHELPER_HPP