2
0
Эх сурвалжийг харах

Improve performance of obj line break

Amit Cirt 8 жил өмнө
parent
commit
8b4e066ca5

+ 18 - 21
code/ObjFileParser.cpp

@@ -99,27 +99,24 @@ ObjFile::Model *ObjFileParser::GetModel() const {
 }
 }
 void ignoreNewLines(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer)
 void ignoreNewLines(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer)
 {
 {
-	std::vector<char> buf(buffer);
-	auto copyPosition = buffer.begin();
-	auto curPosition = buf.cbegin();
-	do
-	{
-		while (*curPosition != '\n'&&*curPosition != '\\')
-		{
-			++curPosition;
-		}
-		if (*curPosition == '\\')
-		{
-			copyPosition = std::copy(buf.cbegin(), curPosition, copyPosition);
-			*(copyPosition++) = ' ';
-			do
-			{
-				streamBuffer.getNextLine(buf);
-			} while (buf[0] == '\n');
-			curPosition = buf.cbegin();
-		}
-	} while (*curPosition != '\n');
-	std::copy(buf.cbegin(), curPosition, copyPosition);
+    static std::vector<char> tempBuf;
+    auto curPosition = buffer.begin();
+    do
+    {
+        while (*curPosition!='\n'&&*curPosition!='\\')
+        {
+            ++curPosition;
+        }
+        if (*curPosition=='\\')
+        {
+            do
+            {
+                streamBuffer.getNextLine(tempBuf);
+            } while (tempBuf[0]=='\n');
+            *curPosition = ' ';
+            std::copy(tempBuf.cbegin(), tempBuf.cend(), ++curPosition);
+        }
+    } while (*curPosition!='\n');
 }
 }
 // -------------------------------------------------------------------
 // -------------------------------------------------------------------
 //  File parsing method.
 //  File parsing method.