Boost logo

Boost Users :

From: Aljaz (aljaz.fajmut_at_[hidden])
Date: 2007-03-16 14:13:52


Hello

I've been trying to get boost iostreams filter to work.
Heres the code I managed to write, but theres something I cannot
understand..
It works fine with one small text file and it will process the lines okay,
but when I try to use another text file (which is much bigger) it wont
recognize any line and will return 0 lines counted (though file has around 2
million lines)..

What am I doing wrong? What could be the cause of this?

Best regards
Thanks for help

Heres the code:

#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/newline.hpp>
#include <boost/iostreams/filter/line.hpp>
#include <boost/ref.hpp>

#include <fstream>
#include <ostream>
#include <iostream>
#include <string>

using namespace std;
using namespace boost::iostreams;
namespace io = boost::iostreams;

class long_line_counter : public io::line_filter {
public:
  explicit long_line_counter(int max_length = 80)
  : max_(max_length), count_(0)
 { }
 int count() const { return count_; }

private:
 std::string do_filter(const std::string& line) {
  ++count_;
  return line;
 }
 int max_;
 int count_;
};

int main() {
 filtering_istream fin;
 long_line_counter llc(80);

 fin.push(boost::ref(llc));
 fin.push(file_source("test2.txt", ios::in | ios::binary));

 char buf[4012];
 while ( fin.read(buf, 4012) && (llc.count() < 7000) ) {
  std::cout << "read" << "\n";
 }

 std::cout << llc.count() << "\n";
 return 0;
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net