summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-07-10 22:23:03 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-07-10 22:23:03 +0000
commitb9d5841f8f8660860e2f6d1669056be01960bfd7 (patch)
tree81de9059c0d32e77a07a83244929ca7528f955ab
parent21ec94afe38878f0efdf1df3ad5a9f724d5cf3e0 (diff)
ContentSize speedups
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4316 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/modules.h105
-rw-r--r--src/modules.cpp11
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,7 +943,7 @@ 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;
@@ -950,10 +951,15 @@ std::string FileReader::Contents()
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();
}