]> git.cworth.org Git - apitrace/blobdiff - gui/saverthread.cpp
Switch more places from qlist to qvector.
[apitrace] / gui / saverthread.cpp
index b8b1bfb4bf5d2a4d9ee1c081c4281fe7d4f2bb90..f3158bb87298d3796324e3afcd8807e8c146a1d5 100644 (file)
@@ -1,6 +1,6 @@
 #include "saverthread.h"
 
-#include "trace_write.hpp"
+#include "trace_writer.hpp"
 
 #include <QFile>
 #include <QHash>
@@ -19,9 +19,9 @@ createFunctionSig(ApiTraceCall *call, unsigned id)
 
     QStringList args = call->argNames();
     sig->num_args = args.count();
-    sig->args = new const char*[args.count()];
+    sig->arg_names = new const char*[args.count()];
     for (int i = 0; i < args.count(); ++i) {
-        sig->args[i] = qstrdup(args[i].toLocal8Bit());
+        sig->arg_names[i] = qstrdup(args[i].toLocal8Bit());
     }
 
     return sig;
@@ -31,9 +31,9 @@ static void
 deleteFunctionSig(Trace::FunctionSig *sig)
 {
     for (int i = 0; i < sig->num_args; ++i) {
-        delete [] sig->args[i];
+        delete [] sig->arg_names[i];
     }
-    delete [] sig->args;
+    delete [] sig->arg_names;
     delete [] sig->name;
     delete sig;
 }
@@ -47,10 +47,10 @@ createStructSig(const ApiStruct &str, unsigned id)
     sig->id = id;
     sig->name = qstrdup(aSig.name.toLocal8Bit());
     sig->num_members = aSig.memberNames.count();
-    char **members = new char*[aSig.memberNames.count()];
-    sig->members = (const char **)members;
+    char **member_names = new char*[aSig.memberNames.count()];
+    sig->member_names = (const char **)member_names;
     for (int i = 0; i < aSig.memberNames.count(); ++i) {
-        members[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
+        member_names[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
     }
     return sig;
 }
@@ -59,9 +59,9 @@ static void
 deleteStructSig(Trace::StructSig *sig)
 {
     for (int i = 0; i < sig->num_members; ++i) {
-        delete [] sig->members[i];
+        delete [] sig->member_names[i];
     }
-    delete [] sig->members;
+    delete [] sig->member_names;
     delete [] sig->name;
     delete sig;
 }
@@ -92,16 +92,16 @@ createBitmaskSig(const ApiBitmask &bt, unsigned id)
     ApiBitmask::Signature::const_iterator itr;
 
     Trace::BitmaskSig *sig = new Trace::BitmaskSig();
-    Trace::BitmaskVal *values = new Trace::BitmaskVal[bsig.count()];
+    Trace::BitmaskFlag *flags = new Trace::BitmaskFlag[bsig.count()];
 
     sig->id = id;
-    sig->count = bsig.count();
-    sig->values = values;
+    sig->num_flags = bsig.count();
+    sig->flags = flags;
 
     int i = 0;
     for (itr = bsig.constBegin(); itr != bsig.constEnd(); ++itr, ++i) {
-        values[i].name = qstrdup(itr->first.toLocal8Bit());
-        values[i].value = itr->second;
+        flags[i].name = qstrdup(itr->first.toLocal8Bit());
+        flags[i].value = itr->second;
     }
 
     return sig;
@@ -110,15 +110,15 @@ createBitmaskSig(const ApiBitmask &bt, unsigned id)
 static void
 deleteBitmaskSig(Trace::BitmaskSig *sig)
 {
-    for (int i = 0; i < sig->count; ++i) {
-        delete [] sig->values[i].name;
+    for (int i = 0; i < sig->num_flags; ++i) {
+        delete [] sig->flags[i].name;
     }
-    delete [] sig->values;
+    delete [] sig->flags;
     delete sig;
 }
 
 static void
-writeArgument(const QVariant &var, unsigned &id)
+writeValue(Trace::Writer &writer, const QVariant &var, unsigned &id)
 {
     int arrayType   = QMetaType::type("ApiArray");
     int bitmaskType = QMetaType::type("ApiBitmask");
@@ -127,94 +127,90 @@ writeArgument(const QVariant &var, unsigned &id)
     int enumType    = QMetaType::type("ApiEnum");
     int type = var.userType();
 
-    Trace::BeginArg(++id);
     switch(type) {
     case QVariant::Bool:
-        Trace::LiteralBool(var.toBool());
+        writer.writeBool(var.toBool());
         break;
     case QVariant::ByteArray: {
         QByteArray ba = var.toByteArray();
-        Trace::LiteralBlob((const void*)ba.constData(), ba.size());
+        writer.writeBlob((const void*)ba.constData(), ba.size());
     }
         break;
     case QVariant::Double:
-        Trace::LiteralFloat(var.toDouble());
+        writer.writeDouble(var.toDouble());
         break;
     case QMetaType::Float:
-        Trace::LiteralFloat(var.toFloat());
+        writer.writeFloat(var.toFloat());
         break;
     case QVariant::Int:
-        Trace::LiteralSInt(var.toInt());
+        writer.writeSInt(var.toInt());
         break;
     case QVariant::LongLong:
-        Trace::LiteralSInt(var.toLongLong());
+        writer.writeSInt(var.toLongLong());
         break;
     case QVariant::String: {
         QString str = var.toString();
-        Trace::LiteralString(str.toLocal8Bit().constData(), str.length());
+        writer.writeString(str.toLocal8Bit().constData(), str.length());
     }
         break;
     case QVariant::UInt:
-        Trace::LiteralUInt(var.toInt());
+        writer.writeUInt(var.toInt());
         break;
     case QVariant::ULongLong:
-        Trace::LiteralUInt(var.toLongLong());
+        writer.writeUInt(var.toLongLong());
         break;
     default:
         if (type == arrayType) {
             ApiArray array = var.value<ApiArray>();
             QList<QVariant> vals = array.values();
-            Trace::BeginArray(vals.count());
+            writer.beginArray(vals.count());
             foreach(QVariant el, vals) {
-                Trace::BeginElement();
-                writeArgument(el, ++id);
-                Trace::EndElement();
+                writer.beginElement();
+                writeValue(writer, el, ++id);
+                writer.endElement();
             }
-            Trace::EndArray();
+            writer.endArray();
         } else if (type == bitmaskType) {
             ApiBitmask bm = var.value<ApiBitmask>();
             Trace::BitmaskSig *sig = createBitmaskSig(bm, ++id);
-            LiteralBitmask(*sig, bm.value());
+            writer.writeBitmask(sig, bm.value());
             deleteBitmaskSig(sig);
         } else if (type == structType) {
             ApiStruct apiStr = var.value<ApiStruct>();
             QList<QVariant> vals = apiStr.values();
             Trace::StructSig *str = createStructSig(apiStr, ++id);
-            Trace::BeginStruct(str);
+            writer.beginStruct(str);
             foreach(QVariant val, vals) {
-                writeArgument(val, ++id);
+                writeValue(writer, val, ++id);
             }
-            Trace::EndStruct();
+            writer.endStruct();
             deleteStructSig(str);
         } else if (type == pointerType) {
             ApiPointer apiPtr = var.value<ApiPointer>();
-            Trace::BeginArray(1);
-            Trace::BeginElement();
-            Trace::LiteralOpaque((const void*)apiPtr.value());
-            Trace::EndElement();
-            Trace::EndArray();
+            //writer.beginArray(1);
+            //writer.beginElement();
+            writer.writeOpaque((const void*)apiPtr.value());
+            //writer.endElement();
+            //writer.endArray();
         } else if (type == enumType) {
             ApiEnum apiEnum = var.value<ApiEnum>();
             Trace::EnumSig *sig = createEnumSig(apiEnum, ++id);
-            Trace::LiteralEnum(sig);
+            writer.writeEnum(sig);
             deleteEnumSig(sig);
         } else {
             qWarning()<<"Unsupported write variant : "
                       << QMetaType::typeName(type);
         }
     }
-
-    Trace::EndArg();
 }
 
-
 SaverThread::SaverThread(QObject *parent)
     : QThread(parent)
 {
 }
 
 void SaverThread::saveFile(const QString &fileName,
-                           const QList<ApiTraceCall*> &calls)
+                           const QVector<ApiTraceCall*> &calls)
 {
     m_fileName = fileName;
     m_calls = calls;
@@ -223,38 +219,41 @@ void SaverThread::saveFile(const QString &fileName,
 
 void SaverThread::run()
 {
-    qputenv("TRACE_PATH", m_fileName.toLocal8Bit());
     unsigned id = 0;
-
-    Trace::Open();
+    qDebug() << "Saving  : " << m_fileName;
+    Trace::Writer writer;
+    writer.open(m_fileName.toLocal8Bit());
     for (int i = 0; i < m_calls.count(); ++i) {
         ApiTraceCall *call = m_calls[i];
         Trace::FunctionSig *funcSig = createFunctionSig(call, ++id);
-        unsigned callNo = BeginEnter(*funcSig);
+        unsigned callNo = writer.beginEnter(funcSig);
         {
             //args
-            QVariantList vars = call->arguments();
+            QVector<QVariant> vars = call->arguments();
+            int index = 0;
             foreach(QVariant var, vars) {
-                writeArgument(var, ++id);
+                writer.beginArg(index++);
+                writeValue(writer, var, ++id);
+                writer.endArg();
             }
         }
-        Trace::EndEnter();
-        Trace::BeginLeave(callNo);
+        writer.endEnter();
+        writer.beginLeave(callNo);
         {
             QVariant ret = call->returnValue();
             if (!ret.isNull()) {
-                Trace::BeginReturn();
-                writeArgument(ret, ++id);
-                Trace::EndReturn();
+                writer.beginReturn();
+                writeValue(writer, ret, ++id);
+                writer.endReturn();
             }
         }
-        Trace::EndLeave();
+        writer.endLeave();
 
         deleteFunctionSig(funcSig);
     }
-    Trace::Close();
+    writer.close();
 
-    emit traceSaved(m_fileName);
+    emit traceSaved();
 }
 
 #include "saverthread.moc"