[kgraphviewer-devel] [kgraphviewer/libkgraphviz] src/kgraphviz: Opt: Reduce overhead for renderop QString

Kevin Funk krf at electrostorm.net
Thu Jan 27 15:10:44 CET 2011


Git commit a6d80a326ce13245f09686645f8d402a045f9644 by Kevin Funk.
Pushed by kfunk into branch 'libkgraphviz'.

Opt: Reduce overhead for renderop QString

Turn DotRenderOp::renderop into an thing QChar wrapper

M  +8    -0    src/kgraphviz/CMakeLists.txt     
M  +1    -1    src/kgraphviz/canvasedge.cpp     
M  +13   -13   src/kgraphviz/canvaselement.cpp     
M  +1    -1    src/kgraphviz/dotgraphview.cpp     
M  +2    -2    src/kgraphviz/support/dotgrammar.cpp     
M  +3    -3    src/kgraphviz/support/dotrenderop.h     

http://commits.kde.org/9c7b74a4/a6d80a326ce13245f09686645f8d402a045f9644

diff --git a/src/kgraphviz/CMakeLists.txt b/src/kgraphviz/CMakeLists.txt
index b052d8a..e8e0cc6 100644
--- a/src/kgraphviz/CMakeLists.txt
+++ b/src/kgraphviz/CMakeLists.txt
@@ -2,6 +2,14 @@
 add_definitions(-DQT_USE_FAST_CONCATENATION)
 add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
 
+# add_definitions(-DQT_NO_CAST_TO_ASCII)
+# add_definitions(-DQT_NO_CAST_FROM_ASCII)
+# add_definitions(-DQT_STRICT_ITERATORS)
+# add_definitions(-DQT_NO_URL_CAST_FROM_STRING)
+# add_definitions(-DQT_NO_CAST_FROM_BYTEARRAY)
+
+add_definitions(-Wall)
+
 if(KGRAPHVIZ_GRAPHICSVIEW_DEBUG)
   add_definitions(-DKGRAPHVIZ_GRAPHICSVIEW_DEBUG)
 endif()
diff --git a/src/kgraphviz/canvasedge.cpp b/src/kgraphviz/canvasedge.cpp
index b7bb11b..f2077e2 100644
--- a/src/kgraphviz/canvasedge.cpp
+++ b/src/kgraphviz/canvasedge.cpp
@@ -172,7 +172,7 @@ void CanvasEdge::computeBoundingRect()
     foreach (const DotRenderOp& dro, edge()->renderOperations())
     {
 //       kDebug() << dro.renderop  << ", ";
-      if ( (dro.renderop != "B") && (dro.renderop != "p") &&  (dro.renderop != "P") ) continue;
+      if ( (dro.renderop != 'B') && (dro.renderop != 'p') &&  (dro.renderop != 'P') ) continue;
       uint previousSize = points.size();
       points.resize(previousSize+dro.integers[0]);
       for (int i = 0; i < dro.integers[0]; i++)
diff --git a/src/kgraphviz/canvaselement.cpp b/src/kgraphviz/canvaselement.cpp
index 5e0301c..f10e83c 100644
--- a/src/kgraphviz/canvaselement.cpp
+++ b/src/kgraphviz/canvaselement.cpp
@@ -279,7 +279,7 @@ void CanvasElement::computeBoundingRect()
 //       dd << (*it).str;
 //       kDebug() << msg;
 
-      if ((*it).renderop == "e" || (*it).renderop == "E")
+      if ((*it).renderop == 'e' || (*it).renderop == 'E')
       {
         qreal w = d->m_scaleX * (*it).integers[2] * 2;
         qreal h = d->m_scaleY * (*it).integers[3] * 2;
@@ -288,7 +288,7 @@ void CanvasElement::computeBoundingRect()
         d->m_boundingRect = QRectF(x - adjust,y - adjust, w + adjust, h + adjust);
 //         kDebug() << "'" << element()->id() << "' set rect for ellipse to " << rect;
       }
-      else if  ((*it).renderop == "p" || (*it).renderop == "P")
+      else if  ((*it).renderop == 'p' || (*it).renderop == 'P')
       {
         QPolygonF polygon((*it).integers[0]);
         for (int i = 0; i < (*it).integers[0]; i++)
@@ -347,7 +347,7 @@ void CanvasElement::paint(QPainter* p,
   {
     p->save();
     const DotRenderOp& dro = it.next();
-    if ( dro.renderop == "B" )
+    if ( dro.renderop == 'B' )
     {
       uint lineWidth = 1;
       QPen pen = p->pen();
@@ -374,7 +374,7 @@ void CanvasElement::paint(QPainter* p,
       }
       if (element()->attributes().contains("color"))
       {
-        kDebug() << "set edge color to " << QColor(element()->attributes()["color"]).name();
+//         kDebug() << "set edge color to " << QColor(element()->attributes()["color"]).name();
         lineColor = QColor(element()->attributes()["color"]);
       }
 
@@ -440,7 +440,7 @@ void CanvasElement::paint(QPainter* p,
         p->restore();
       }
     }
-    else if (dro.renderop == "c")
+    else if (dro.renderop == 'c')
     {
       QColor c(dro.str.mid(0,7));
       bool ok;
@@ -448,7 +448,7 @@ void CanvasElement::paint(QPainter* p,
       p->setPen(c);
 //       kDebug() << "c" << dro.str.mid(0,7) << lineColor;
     }
-    else if (dro.renderop == "C")
+    else if (dro.renderop == 'C')
     {
       QColor c(dro.str.mid(0,7));
       bool ok;
@@ -458,16 +458,16 @@ void CanvasElement::paint(QPainter* p,
         c = c.lighter();
       }
       p->setBrush(c);
-      kDebug() << "C" << dro.str.mid(0,7) << backColor;
+//       kDebug() << "C" << dro.str.mid(0,7) << backColor;
     }
-    else if (dro.renderop == "e" || dro.renderop == "E")
+    else if (dro.renderop == 'e' || dro.renderop == 'E')
     {
       const qreal w = scaleX() * dro.integers[2] * 2;
       const qreal h = scaleY() *  dro.integers[3] * 2;
       const qreal x = (marginX() + (dro.integers[0]/*%m_wdhcf*/)*scaleX()) - w/2;
       const qreal y = ((gh() -  dro.integers[1]/*%m_hdvcf*/)*scaleY() + marginY()) - h/2;
       p->save();
-      if (dro.renderop == "E" )
+      if (dro.renderop == 'E' )
       {
         p->setBrush(backColor);
       }
@@ -491,7 +491,7 @@ void CanvasElement::paint(QPainter* p,
       p->drawEllipse(rect);
       p->restore();
     }
-    else if ( dro.renderop == "L" )
+    else if ( dro.renderop == 'L' )
     {
 //       kDebug() << "Label";
       QPolygonF points(dro.integers[0]);
@@ -522,7 +522,7 @@ void CanvasElement::paint(QPainter* p,
       p->drawPolyline(points);
       p->restore();
     }
-    else if (dro.renderop == "p" || dro.renderop == "P")
+    else if (dro.renderop == 'p' || dro.renderop == 'P')
     {
 //       std::cerr << "Drawing polygon for node '"<<element()->id()<<"': ";
       QPolygonF points(dro.integers[0]);
@@ -587,13 +587,13 @@ void CanvasElement::paint(QPainter* p,
         }
       }
     }
-    else if (dro.renderop == "F")
+    else if (dro.renderop == 'F')
     {
       element()->setFontName(dro.str);
       element()->setFontSize(dro.integers[0]);
 //       kDebug() << "F" << element()->fontName() << element()->fontColor() << element()->fontSize();
     }
-    else if ( dro.renderop == "T" )
+    else if ( dro.renderop == 'T' )
     {
       const qreal stringWidthGoal = dro.integers[3] * scaleX();
       int fontSize = element()->fontSize();
diff --git a/src/kgraphviz/dotgraphview.cpp b/src/kgraphviz/dotgraphview.cpp
index 1abb36d..b864f52 100644
--- a/src/kgraphviz/dotgraphview.cpp
+++ b/src/kgraphviz/dotgraphview.cpp
@@ -773,7 +773,7 @@ bool DotGraphView::displayGraph()
 //   kDebug() << "Adding graph render operations: " << d->m_graph->renderOperations().size();
   foreach (const DotRenderOp& dro, d->m_graph->renderOperations())
   {
-    if ( dro.renderop == "T" )
+    if ( dro.renderop == 'T' )
     {
 //       std::cerr << "Adding graph label '"<<dro.str<<"'" << std::endl;
       const QString& str = dro.str;
diff --git a/src/kgraphviz/support/dotgrammar.cpp b/src/kgraphviz/support/dotgrammar.cpp
index 202f7b8..663bfca 100644
--- a/src/kgraphviz/support/dotgrammar.cpp
+++ b/src/kgraphviz/support/dotgrammar.cpp
@@ -461,12 +461,12 @@ void init_op()
 void valid_op(char const* first, char const* last)
 {
   std::string s(first, last);
-  renderop.renderop = QString::fromUtf8(therenderop.c_str());
+  renderop.renderop = therenderop.c_str()[0];
   renderop.str = QString::fromUtf8(thestr.c_str());
 
 //   kDebug() << "Validating render operation '"<<QString::fromStdString(s)<<"': '"<<renderop.renderop<<"/"<<renderop.str<<"'";
   renderopvec->push_back(renderop);
-  renderop.renderop = "";
+  renderop.renderop = ' ';
   renderop.integers = QList<int>();
   renderop.str = "";
 }
diff --git a/src/kgraphviz/support/dotrenderop.h b/src/kgraphviz/support/dotrenderop.h
index 74699c5..6e15b6a 100644
--- a/src/kgraphviz/support/dotrenderop.h
+++ b/src/kgraphviz/support/dotrenderop.h
@@ -19,9 +19,9 @@
 #ifndef DOT_RENDEROP_H
 #define DOT_RENDEROP_H
 
-#include <QString>
+#include <QChar>
 #include <QList>
-#include <QTextStream>
+#include <QString>
 
 /**
  * members are interpreted in function of render operations definitions given at:
@@ -29,7 +29,7 @@
  */
 struct DotRenderOp
 {
-  QString renderop;
+  QChar renderop;
   QList< int > integers;
   QString str;
 };



More information about the kgraphviewer-devel mailing list