G43riko
5/8/2017 - 12:28 PM

FileManager.cpp

#include <boost/iostreams/device/mapped_file.hpp> // for mmap
#include <algorithm>  // for std::find
#include <iostream>   // for std::cout
#include <cstring>
#include <sys/stat.h>

FileManager{
	long long getFileSize(std::string fileName){
		struct stat buf;
		stat(fileName.c_str(), &buf);
		return buf.st_size;
	}
	std::string getContent(std::string fileName){

	}
	std::string getNthLine(std::string fileName, unsigned int line){
		std::ifstream in(filename.c_str());

		std::string s;

		//for performance
		s.reserve(10000000000);    

		//skip N lines
		for(unsigned int i = 0; i < line; ++i){
			std::getline(in, s);
		}

		std::getline(in, s);
		return s; 
	}
	uintmax_t getNumLines(std::string fileName){
		boost::iostreams::mapped_file mmap(fileName, boost::iostreams::mapped_file::readonly);
		auto f = mmap.const_data();
		auto l = f + mmap.size();

		uintmax_t numLines = 0;
		while (f && f!=l){
			if ((f = static_cast<const char*>(memchr(f, '\n', l-f)))){
				numLines++, f++;
			}
		}
		return numLines;
	}
}