Split CSV parsing into nicer interface

This commit is contained in:
Patrick Niklaus
2017-03-08 00:38:08 +00:00
committed by Patrick Niklaus
parent 20e028c47b
commit 83820bf82c
5 changed files with 297 additions and 192 deletions
+47
View File
@@ -0,0 +1,47 @@
#include "updater/csv_source.hpp"
#include "updater/csv_file_parser.hpp"
#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/include/adapt_adt.hpp>
BOOST_FUSION_ADAPT_STRUCT(osrm::updater::Segment,
(decltype(osrm::updater::Segment::from),
from)(decltype(osrm::updater::Segment::to), to))
BOOST_FUSION_ADAPT_STRUCT(osrm::updater::SpeedSource,
(decltype(osrm::updater::SpeedSource::speed),
speed)(decltype(osrm::updater::SpeedSource::weight), weight))
BOOST_FUSION_ADAPT_STRUCT(osrm::updater::Turn,
(decltype(osrm::updater::Turn::from),
from)(decltype(osrm::updater::Turn::via),
via)(decltype(osrm::updater::Turn::to), to))
BOOST_FUSION_ADAPT_STRUCT(osrm::updater::PenaltySource,
(decltype(osrm::updater::PenaltySource::duration),
duration)(decltype(osrm::updater::PenaltySource::weight), weight))
namespace
{
namespace qi = boost::spirit::qi;
}
namespace osrm
{
namespace updater
{
namespace csv
{
SegmentLookupTable readSegmentValues(const std::vector<std::string> &paths)
{
return CSVFilesParser<Segment, SpeedSource>(
1, qi::ulong_long >> ',' >> qi::ulong_long, qi::uint_ >> -(',' >> qi::double_))(paths);
}
TurnLookupTable readTurnValues(const std::vector<std::string> &paths)
{
return CSVFilesParser<Turn, PenaltySource>(1,
qi::ulong_long >> ',' >> qi::ulong_long >> ',' >>
qi::ulong_long,
qi::double_ >> -(',' >> qi::double_))(paths);
}
}
}
}