[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegames/kpat
From:       Parker Coates <parker.coates () kdemail ! net>
Date:       2012-02-15 4:44:57
Message-ID: 20120215044457.1699CAC894 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1280164 by coates:

Convert DealerScene::saveGame() from QDomDocument to QXmlStreamWriter.

I wanted to try out QXmlStreamWriter for my upcoming save game format
changes, so I thought I'd port the existing code over as a test.
Personally, I find this a bit more readable, especially for someone who
isn't familiar with the concepts of the DOM.

The QXmlStream*er classes also come with some other benefits. They
should be faster, they use less memory since the entire document
doesn't need to be loaded in memory, and they'll still be around in Qt5
unlike QDomDocument, which will apparently be deprecated.

 M  +27 -25    dealer.cpp  


--- trunk/KDE/kdegames/kpat/dealer.cpp #1280163:1280164
@@ -60,6 +60,7 @@
 #include <QtCore/QString>
 #include <QtCore/QThread>
 #include <QtCore/QTimer>
+#include <QtCore/QXmlStreamWriter>
 #include <QtGui/QGraphicsSceneMouseEvent>
 #include <QtGui/QPainter>
 #include <QtXml/QDomDocument>
@@ -217,40 +218,41 @@
 
 void DealerScene::saveGame( QIODevice * io )
 {
-    QDomDocument doc("kpat");
+    QXmlStreamWriter xml( io );
+    xml.setCodec( "UTF-8" );
+    xml.setAutoFormatting( true );
+    xml.setAutoFormattingIndent( -1 );
+    xml.writeStartDocument();
+    xml.writeDTD( "<!DOCTYPE kpat>" );
 
-    QDomElement dealer = doc.createElement("dealer");
-    doc.appendChild(dealer);
-    dealer.setAttribute("id", gameId());
-    dealer.setAttribute("options", getGameOptions());
-    dealer.setAttribute("number", QString::number(gameNumber()));
-    dealer.setAttribute("moves", moveCount());
-    dealer.setAttribute("started", d->gameStarted);
-    QString data = getGameState();
-    if (!data.isEmpty())
-        dealer.setAttribute("data", data);
+    xml.writeStartElement( "dealer" );
+    xml.writeAttribute( "id", QString::number( gameId() ) );
+    xml.writeAttribute( "options", getGameOptions() );
+    xml.writeAttribute( "number", QString::number( gameNumber() ) );
+    xml.writeAttribute( "moves", QString::number( moveCount() ) );
+    xml.writeAttribute( "started", QString::number( d->gameStarted ) );
+    xml.writeAttribute( "data", getGameState() );
 
-    foreach( PatPile * p, patPiles() )
+    foreach( const PatPile * p, patPiles() )
     {
-        QDomElement pile = doc.createElement("pile");
-        pile.setAttribute("index", p->index());
-        pile.setAttribute("z", p->zValue());
+        xml.writeStartElement( "pile" );
+        xml.writeAttribute( "index", QString::number( p->index() ) );
+        xml.writeAttribute( "z", QString::number( p->zValue() ) );
 
         foreach(const KCard * c, p->cards() )
         {
-            QDomElement card = doc.createElement("card");
-            card.setAttribute("suit", c->suit());
-            card.setAttribute("value", c->rank());
-            card.setAttribute("faceup", c->isFaceUp());
-            pile.appendChild(card);
+            xml.writeStartElement( "card" );
+            xml.writeAttribute( "suit", QString::number( c->suit() ) );
+            xml.writeAttribute( "value", QString::number( c->rank() ) );
+            xml.writeAttribute( "faceup", QString::number( c->isFaceUp() ) );
+            xml.writeAttribute( "z", QString::number( c->zValue() ) );
+            xml.writeEndElement();
         }
-        dealer.appendChild(pile);
+        xml.writeEndElement();
     }
+    xml.writeEndElement();
+    xml.writeEndDocument();
 
-    QTextStream stream( io );
-    stream.setCodec("UTF-8");
-    stream << doc.toString();
-
     d->gameWasJustSaved = true;
 }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic