From b9d5841f8f8660860e2f6d1669056be01960bfd7 Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 10 Jul 2006 22:23:03 +0000 Subject: ContentSize speedups git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4316 e03df62e-2008-0410-955e-edbf42e46eb7 --- include/modules.h | 105 ++++++++++++++++++++++++++++-------------------------- src/modules.cpp | 11 ++++-- 2 files changed, 64 insertions(+), 52 deletions(-) diff --git a/include/modules.h b/include/modules.h index 33416a596..a1d350b8f 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1824,57 +1824,62 @@ class FileReader : public classbase /** The file contents */ file_cache fc; + + unsigned long contentsize; + + void CalcSize(); + public: - /** Default constructor. - * This method does not load any file into memory, you must use the LoadFile method - * after constructing the class this way. - */ - FileReader(); - - /** Secondary constructor. - * This method initialises the class with a file loaded into it ready for GetLine and - * and other methods to be called. If the file could not be loaded, FileReader::FileSize - * returns 0. - */ - FileReader(const std::string &filename); - - /** Default destructor. - * This deletes the memory allocated to the file. - */ - ~FileReader(); - - /** Used to load a file. - * This method loads a file into the class ready for GetLine and - * and other methods to be called. If the file could not be loaded, FileReader::FileSize - * returns 0. - */ - void LoadFile(const std::string &filename); - - /** Returns the whole content of the file as std::string - */ - std::string Contents(); - - /** Returns the entire size of the file as std::string - */ - unsigned long ContentSize(); - - /** Returns true if the file exists - * This function will return false if the file could not be opened. - */ - bool Exists(); - - /** Retrieve one line from the file. - * This method retrieves one line from the text file. If an empty non-NULL string is returned, - * the index was out of bounds, or the line had no data on it. - */ - std::string GetLine(int x); - - /** Returns the size of the file in lines. - * This method returns the number of lines in the read file. If it is 0, no lines have been - * read into memory, either because the file is empty or it does not exist, or cannot be - * opened due to permission problems. - */ - int FileSize(); + /** Default constructor. + * This method does not load any file into memory, you must use the LoadFile method + * after constructing the class this way. + */ + FileReader(); + + /** Secondary constructor. + * This method initialises the class with a file loaded into it ready for GetLine and + * and other methods to be called. If the file could not be loaded, FileReader::FileSize + * returns 0. + */ + FileReader(const std::string &filename); + + /** Default destructor. + * This deletes the memory allocated to the file. + */ + ~FileReader(); + + /** Used to load a file. + * This method loads a file into the class ready for GetLine and + * and other methods to be called. If the file could not be loaded, FileReader::FileSize + * returns 0. + */ + void LoadFile(const std::string &filename); + + /** Returns the whole content of the file as std::string + */ + std::string Contents(); + + /** Returns the entire size of the file as std::string + */ + unsigned long ContentSize(); + + /** Returns true if the file exists + * This function will return false if the file could not be opened. + */ + bool Exists(); + + /** Retrieve one line from the file. + * This method retrieves one line from the text file. If an empty non-NULL string is returned, + * the index was out of bounds, or the line had no data on it. + */ + std::string GetLine(int x); + + /** Returns the size of the file in lines. + * This method returns the number of lines in the read file. If it is 0, no lines have been + * read into memory, either because the file is empty or it does not exist, or cannot be + * opened due to permission problems. + */ + int FileSize(); }; diff --git a/src/modules.cpp b/src/modules.cpp index 3ec932980..2297db53b 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -931,6 +931,7 @@ FileReader::FileReader(const std::string &filename) file_cache c; readfile(c,filename.c_str()); this->fc = c; + this->CalcSize(); } FileReader::FileReader() @@ -942,18 +943,23 @@ std::string FileReader::Contents() std::string x = ""; for (file_cache::iterator a = this->fc.begin(); a != this->fc.end(); a++) { - x.append(a->c_str()); + x.append(*a); x.append("\r\n"); } return x; } unsigned long FileReader::ContentSize() +{ + return this->contentsize; +} + +void FileReader::CalcSize() { unsigned long n = 0; for (file_cache::iterator a = this->fc.begin(); a != this->fc.end(); a++) n += (a->length() + 2); - return n; + this->contentsize = n; } void FileReader::LoadFile(const std::string &filename) @@ -961,6 +967,7 @@ void FileReader::LoadFile(const std::string &filename) file_cache c; readfile(c,filename.c_str()); this->fc = c; + this->CalcSize(); } -- cgit v1.2.3