Skip to content
Extraits de code Groupes Projets
Valider b3108692 rédigé par Rodrigo Braz Monteiro's avatar Rodrigo Braz Monteiro
Parcourir les fichiers

Optimized file reading.

Originally committed to SVN as r2452.
parent 445452e6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -80,9 +80,11 @@ void TextFileReader::SetEncodingConfiguration() ...@@ -80,9 +80,11 @@ void TextFileReader::SetEncodingConfiguration()
// Set encoding configuration // Set encoding configuration
swap = false; swap = false;
Is16 = false; Is16 = false;
isUtf8 = false;
//conv = shared_ptr<wxMBConv>(); //conv = shared_ptr<wxMBConv>();
if (encoding == _T("UTF-8")) { if (encoding == _T("UTF-8")) {
conv = shared_ptr<wxMBConv> (new wxMBConvUTF8); conv = shared_ptr<wxMBConv> (new wxMBConvUTF8);
isUtf8 = true;
} }
else if (encoding == _T("UTF-16LE")) { else if (encoding == _T("UTF-16LE")) {
Is16 = true; Is16 = true;
...@@ -109,8 +111,20 @@ void TextFileReader::SetEncodingConfiguration() ...@@ -109,8 +111,20 @@ void TextFileReader::SetEncodingConfiguration()
//////////////////// ////////////////////
// Helper functions // Helper functions
wxString GetString(char *read,shared_ptr<wxMBConv> conv) { return wxString(read,*conv); } String GetString(char *read,shared_ptr<wxMBConv> conv,bool isUtf8)
wxString GetString(wchar_t *read,shared_ptr<wxMBConv> conv) { (void)conv; return wxString(read); } {
if (isUtf8) {
return String(read);
} else {
return wxString(read,*conv);
}
}
String GetString(wchar_t *read,shared_ptr<wxMBConv> conv,bool isUtf8)
{
(void)conv;
(void)isUtf8;
return wxString(read);
}
inline void Swap(wchar_t &a) { inline void Swap(wchar_t &a) {
char *c = (char*) &a; char *c = (char*) &a;
char aux = c[0]; char aux = c[0];
...@@ -123,7 +137,7 @@ inline void Swap(char &a) { (void) a; } ...@@ -123,7 +137,7 @@ inline void Swap(char &a) { (void) a; }
//////////////// ////////////////
// Parse a line // Parse a line
template <typename T> template <typename T>
void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,wxString &stringBuffer,shared_ptr<wxMBConv> conv,bool swap) void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,String &stringBuffer,shared_ptr<wxMBConv> conv,bool swap,bool isUtf8)
{ {
// Look for a new line // Look for a new line
int newLinePos = -1; int newLinePos = -1;
...@@ -165,7 +179,7 @@ void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,wxString &stringBuffer ...@@ -165,7 +179,7 @@ void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,wxString &stringBuffer
// Replace newline with null character and convert to proper charset // Replace newline with null character and convert to proper charset
if (newLinePos) { if (newLinePos) {
read[newLinePos] = 0; read[newLinePos] = 0;
stringBuffer = GetString(read,conv); stringBuffer = GetString(read,conv,isUtf8);
} }
// Remove an extra character if the new is the complement of \n,\r (13^7=10, 10^7=13) // Remove an extra character if the new is the complement of \n,\r (13^7=10, 10^7=13)
...@@ -179,16 +193,16 @@ void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,wxString &stringBuffer ...@@ -179,16 +193,16 @@ void ParseLine(FastBuffer<T> &_buffer,wxInputStream &file,wxString &stringBuffer
// Reads a line from file // Reads a line from file
Athenasub::String TextFileReader::ActuallyReadLine() Athenasub::String TextFileReader::ActuallyReadLine()
{ {
wxString stringBuffer; String stringBuffer;
size_t bufAlloc = 1024; size_t bufAlloc = 1024;
stringBuffer.Alloc(bufAlloc); stringBuffer.reserve(bufAlloc);
std::string buffer = ""; std::string buffer = "";
// Read UTF-16 line from file // Read UTF-16 line from file
if (Is16) ParseLine<wchar_t>(buffer2,file,stringBuffer,conv,swap); if (Is16) ParseLine<wchar_t>(buffer2,file,stringBuffer,conv,swap,false);
// Read ASCII/UTF-8 line from file // Read ASCII/UTF-8 line from file
else ParseLine<char>(buffer1,file,stringBuffer,conv,false); else ParseLine<char>(buffer1,file,stringBuffer,conv,false,isUtf8);
// Remove BOM // Remove BOM
size_t startPos = 0; size_t startPos = 0;
......
...@@ -59,6 +59,7 @@ namespace Athenasub { ...@@ -59,6 +59,7 @@ namespace Athenasub {
wxInputStream &file; wxInputStream &file;
shared_ptr<wxMBConv> conv; shared_ptr<wxMBConv> conv;
bool Is16; bool Is16;
bool isUtf8;
bool swap; bool swap;
bool trim; bool trim;
bool threaded; bool threaded;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter