7#include <stdair/stdair_exceptions.hpp>
8#include <stdair/stdair_types.hpp>
9#include <stdair/bom/BomRoot.hpp>
10#include <stdair/service/Logger.hpp>
17namespace bsc = boost::spirit::classic;
41 const stdair::AirlineCode_T lAirlineCode (iStr, iStrEnd);
87 const stdair::DateOffset_T oneDay (1);
111 stdair::DOW_String_T lDow (iStr, iStrEnd);
124 stdair::AirportCode_T lBoardingPoint (iStr, iStrEnd);
153 stdair::AirportCode_T lOffPoint (iStr, iStrEnd);
169 const stdair::AirlineCode_T lAirlineCode (iStr, iStrEnd);
170 if (lAirlineCode.size() == 2) {
223 const stdair::DateOffset_T lDateOffset (
_flightPeriod._dateOffset);
244 const stdair::DateOffset_T lDateOffset (
_flightPeriod._dateOffset);
314 stdair::AirportCode_T lBoardingPoint (iStr, iStrEnd);
327 stdair::AirportCode_T lOffPoint (iStr, iStrEnd);
351 std::string lClasses (iStr, iStrEnd);
352 _flightPeriod._itSegmentCabin._itFareFamily._classes = lClasses;
375 std::ostringstream ostr;
377 _flightPeriod._itSegmentCabin._itFareFamily._familyCode = ostr.str();
389 const std::string lKey (iStr, iStrEnd);
390 _flightPeriod._itSegmentCabin._itFareFamily._frat5CurveKey = lKey;
403 const std::string lKey (iStr, iStrEnd);
404 _flightPeriod._itSegmentCabin._itFareFamily._ffDisutilityCurveKey = lKey;
416 std::string lClasses (iStr, iStrEnd);
455 STDAIR_LOG_DEBUG (
"FlightPeriod: " <<
_flightPeriod.describe());
536 template<
typename ScannerT>
544 bsc::lexeme_d[ bsc::comment_p(
"//") | bsc::comment_p(
"/*",
"*/")
672 BOOST_SPIRIT_DEBUG_NODE (
date);
673 BOOST_SPIRIT_DEBUG_NODE (
dow);
674 BOOST_SPIRIT_DEBUG_NODE (
leg);
675 BOOST_SPIRIT_DEBUG_NODE (
leg_key);
677 BOOST_SPIRIT_DEBUG_NODE (
time);
690 template<
typename ScannerT>
691 bsc::rule<ScannerT>
const&
707 const stdair::Filename_T& iFilename)
708 : _filename (iFilename), _bomRoot (ioBomRoot) {
713 void FlightPeriodFileParser::init() {
718 if (!_startIterator) {
719 std::ostringstream oMessage;
720 oMessage <<
"The file " << _filename <<
" can not be open." << std::endl;
721 STDAIR_LOG_ERROR (oMessage.str());
726 _endIterator = _startIterator.make_end();
731 bool oResult =
false;
733 STDAIR_LOG_DEBUG (
"Parsing schedule input file: " << _filename);
741 bsc::parse_info<iterator_t> info = bsc::parse (_startIterator, _endIterator,
743 bsc::space_p - bsc::eol_p);
748 const bool isFull = info.full;
750 const std::string hasBeenFullyReadStr = (isFull ==
true)?
"":
"not ";
751 if (oResult ==
true && isFull ==
true) {
752 STDAIR_LOG_DEBUG (
"Parsing of schedule input file: " << _filename
753 <<
" succeeded: read " << info.length
754 <<
" characters. The input file has "
755 << hasBeenFullyReadStr
756 <<
"been fully read. Stop point: " << info.stop);
759 STDAIR_LOG_ERROR (
"Parsing of schedule input file: " << _filename
760 <<
" failed: read " << info.length
761 <<
" characters. The input file has "
762 << hasBeenFullyReadStr
763 <<
"been fully read. Stop point: " << info.stop);
765 + _filename +
" failed.");
bool generateInventories()
FlightPeriodFileParser(stdair::BomRoot &ioBomRoot, const stdair::Filename_T &iFilename)
bounded2_p_t day_p(uint2_p.derived(), 1u, 31u)
chset_t cabin_code_p("A-Z")
repeat_p_t key_p(chset_t("0-9A-Z").derived(), 1, 10)
bounded2_p_t month_p(uint2_p.derived(), 1u, 12u)
bounded2_p_t seconds_p(uint2_p.derived(), 0u, 59u)
repeat_p_t dow_p(chset_t("0-1").derived().derived(), 7, 7)
bounded4_p_t year_p(uint4_p.derived(), 2000u, 2099u)
repeat_p_t class_code_list_p(chset_t("A-Z").derived(), 1, 26)
bounded2_p_t minutes_p(uint2_p.derived(), 0u, 59u)
bounded1_4_p_t flight_number_p(uint1_4_p.derived(), 0u, 9999u)
bounded2_p_t hours_p(uint2_p.derived(), 0u, 23u)
repeat_p_t airline_code_p(chset_t("0-9A-Z").derived(), 2, 3)
repeat_p_t airport_p(chset_t("0-9A-Z").derived(), 3, 3)
boost::spirit::classic::impl::loop_traits< chset_t, unsignedint, unsignedint >::type repeat_p_t
boost::spirit::classic::int_parser< unsigned int, 10, 1, 1 > int1_p_t
boost::spirit::classic::uint_parser< unsigned int, 10, 2, 2 > uint2_p_t
boost::spirit::classic::bounded< uint1_4_p_t, unsigned int > bounded1_4_p_t
boost::spirit::classic::bounded< uint2_p_t, unsigned int > bounded2_p_t
boost::spirit::classic::chset< char_t > chset_t
boost::spirit::classic::file_iterator< char_t > iterator_t
boost::spirit::classic::bounded< uint4_p_t, unsigned int > bounded4_p_t
boost::spirit::classic::uint_parser< unsigned int, 10, 1, 4 > uint1_4_p_t
boost::spirit::classic::uint_parser< unsigned int, 10, 4, 4 > uint4_p_t
Utility Structure for the parsing of fare family details.
boost::spirit::classic::rule< ScannerT > generic_segment
boost::spirit::classic::rule< ScannerT > const & start() const
boost::spirit::classic::rule< ScannerT > flight_period_end
boost::spirit::classic::rule< ScannerT > family_cabin_details
boost::spirit::classic::rule< ScannerT > airline_code
boost::spirit::classic::rule< ScannerT > segment_cabin_details
boost::spirit::classic::rule< ScannerT > segment_key
definition(FlightPeriodParser const &self)
boost::spirit::classic::rule< ScannerT > specific_segment_list
boost::spirit::classic::rule< ScannerT > leg
boost::spirit::classic::rule< ScannerT > leg_key
boost::spirit::classic::rule< ScannerT > operating_leg_details
boost::spirit::classic::rule< ScannerT > full_segment_cabin_details
boost::spirit::classic::rule< ScannerT > leg_cabin_details
boost::spirit::classic::rule< ScannerT > date_offset
boost::spirit::classic::rule< ScannerT > segment_section
boost::spirit::classic::rule< ScannerT > flight_number
boost::spirit::classic::rule< ScannerT > dow
boost::spirit::classic::rule< ScannerT > leg_details
boost::spirit::classic::rule< ScannerT > time
boost::spirit::classic::rule< ScannerT > date
boost::spirit::classic::rule< ScannerT > flight_period
boost::spirit::classic::rule< ScannerT > flight_key
boost::spirit::classic::rule< ScannerT > flight_period_list
boost::spirit::classic::rule< ScannerT > not_to_be_parsed
FlightPeriodParser(stdair::BomRoot &, FlightPeriodStruct &)
FlightPeriodStruct & _flightPeriod
stdair::BomRoot & _bomRoot
ParserSemanticAction(FlightPeriodStruct &)
FlightPeriodStruct & _flightPeriod
stdair::BomRoot & _bomRoot
doEndFlight(stdair::BomRoot &, FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeAirlineCode(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeBoardingTime(FlightPeriodStruct &)
void operator()(double iReal) const
storeCapacity(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeClasses(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeDateRangeEnd(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeDateRangeStart(FlightPeriodStruct &)
storeDow(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeElapsedTime(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeFClasses(FlightPeriodStruct &)
storeFFDisutilityCurveKey(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeFRAT5CurveKey(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeFamilyCode(FlightPeriodStruct &)
void operator()(int iCode) const
storeFlightNumber(FlightPeriodStruct &)
void operator()(unsigned int iNumber) const
storeLegBoardingPoint(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(char iChar) const
storeLegCabinCode(FlightPeriodStruct &)
storeLegOffPoint(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeOffTime(FlightPeriodStruct &)
storeOperatingAirlineCode(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeOperatingFlightNumber(FlightPeriodStruct &)
void operator()(unsigned int iNumber) const
storeSegmentBoardingPoint(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(char iChar) const
storeSegmentCabinCode(FlightPeriodStruct &)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
storeSegmentOffPoint(FlightPeriodStruct &)
storeSegmentSpecificity(FlightPeriodStruct &)
void operator()(char iChar) const