don't call ostream::write too often.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sun, 31 Jan 2010 19:18:38 +0100
changeset 5930 f449711db53c
parent 5929 6fc881b42bff
child 5931 894221b51957
child 5936 66ca055e81c0
child 6037 fedfb1cedb9b
don't call ostream::write too often.
src/common/buffer.cc
--- a/src/common/buffer.cc	Wed Jan 27 12:09:07 2010 +0100
+++ b/src/common/buffer.cc	Sun Jan 31 19:18:38 2010 +0100
@@ -39,6 +39,21 @@
 #define HEURISTICS(x)
 #endif
 
+namespace {
+
+static struct Zeroes
+{
+  Zeroes ()
+    : size (1000)
+  {
+    memset (buffer, 0, size);
+  }
+  char buffer[1000];
+  const uint32_t size;
+} g_zeroes;
+
+}
+
 //#define PRINT_STATS 1
 
 namespace ns3 {
@@ -694,10 +709,12 @@
         { 
           size -= m_zeroAreaStart-m_start;
           tmpsize = std::min (m_zeroAreaEnd - m_zeroAreaStart, size);
-          char zero = 0;
-          for (uint32_t i = 0; i < tmpsize; ++i)
+          uint32_t left = tmpsize;
+          while (left > 0)
             {
-              os->write (&zero, 1);
+              uint32_t toWrite = std::min (left, g_zeroes.size);
+              os->write (g_zeroes.buffer, toWrite);
+              left -= toWrite;
             }
           if (size > tmpsize)
             {