I've implemented simple ascii parser using boost::spirit
.
target ascii file looks like
n
0 23 45 10.0 0.5
.....
n-1 x y .....
but it returns in measure_list only 1 element
if I am trying to read ASCII as a simple vector<double>
instead of structured for example - it works fine. Whats wrong?
struct measure
{
int id;
double x, y, size_, angle;
}
BOOST_FUSION_ADAPT_STRUCT(measure, (int, id)(double, x)(double, y)(double, size_)(double, angel))
typedef std::vector<measure> data_t;
void RelativeMeasure(string filename)
{
clear();
if(!filesystem::exists(filename)) return;
file_name = filename;
ifstream calibration_file(filename);
if(calibration_file.is_open())
{
int key_count;
calibration_file >> key_count;
istreambuf_iterator<char> eos;
istreambuf_iterator<char> it(calibration_file);
std::string strver(it, eos);
std::vector<measure> measure_list;
measure_list.reserve(100000);
qi::phrase_parse(strver.begin(), strver.end(), (qi::int_ > qi::double_ > qi::double_ > qi::double_ > qi::double_) % qi::eol, qi::blank, measure_list);
for each(auto measure in measure_list) key_list.push_back(KeyPoint(measure.x, measure.y, measure.size_, measure.angel));
}