<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/115439/">https://git.reviewboard.kde.org/r/115439/</a>
     </td>
    </tr>
   </table>
   <br />




<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for KDE Edu.</div>
<div>By Percy Camilo TriveƱo Aucahuasi.</div>


<p style="color: grey;"><i>Updated Feb. 11, 2014, 4:48 a.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Hi Aleix, 

How about this one? This time I went right through the QVariant approach (to solve the main problem: avoid mixing virtual methods with raw templates) 

The class ExpressionWriter was renamed to AbstractExpressionVisitor and I fixed some weird naming conventions like: accept method names in the Visitor and visit method names in the object subclasses. Now -for the methods- the visitor has visit as naming convention and the object subclases has accept name (instead of visit) to setup the current visitor.

By the way, with this patch:
- All analitza test pass
- I don't feel any performance decline, since QVariant olds a single value of a single type at a time, so all QString based visitors are performing like before.

Finally, I tested this patch with some LLVM types e.g:

Q_DECLARE_METATYPE(llvm::Value*);

and everything was ok (QVariant::setValue, QVariant::value<>, QVariant::canConvert, etc)

Percy</pre>
  </td>
 </tr>
</table>







<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
analitza
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Currently ExpressionWriter allows a great flexibility to visit each node (by type) of the parser's tree, but it returns only QString as result.

I propose open this API by this generic interface: AbstractExpressionWriter. This interface can be used by any client to visit the tree and, in addition, the client can choose the type of the results for each visit.

This patch adds AbstractExpressionWriter, ExpressionWriter, List, CustomObject, Matrix, Apply and Container as public API (headers will be installed)
</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">build & install ok, also each class has the ANALITZA_EXPORT macro.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> (updated)</h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>analitza/CMakeLists.txt <span style="color: grey">(af270b6)</span></li>

 <li>analitza/abstractexpressionvisitor.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>analitza/abstractexpressionvisitor.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>analitza/analitzautils.cpp <span style="color: grey">(c38eeaa)</span></li>

 <li>analitza/apply.h <span style="color: grey">(84b09f5)</span></li>

 <li>analitza/apply.cpp <span style="color: grey">(e787372)</span></li>

 <li>analitza/container.h <span style="color: grey">(f0deec6)</span></li>

 <li>analitza/container.cpp <span style="color: grey">(aabd780)</span></li>

 <li>analitza/customobject.h <span style="color: grey">(b6f200c)</span></li>

 <li>analitza/customobject.cpp <span style="color: grey">(da8bdb9)</span></li>

 <li>analitza/expression.cpp <span style="color: grey">(48fd8d8)</span></li>

 <li>analitza/expressiontypechecker.h <span style="color: grey">(8263c2b)</span></li>

 <li>analitza/expressiontypechecker.cpp <span style="color: grey">(8616127)</span></li>

 <li>analitza/expressionwriter.h <span style="color: grey">(ea9c92d)</span></li>

 <li>analitza/expressionwriter.cpp <span style="color: grey">(8aff488)</span></li>

 <li>analitza/htmlexpressionwriter.h <span style="color: grey">(f8d0060)</span></li>

 <li>analitza/htmlexpressionwriter.cpp <span style="color: grey">(cf7d4a0)</span></li>

 <li>analitza/list.h <span style="color: grey">(9719f9e)</span></li>

 <li>analitza/list.cpp <span style="color: grey">(fd1e411)</span></li>

 <li>analitza/mathmlexpressionwriter.h <span style="color: grey">(70b08ae)</span></li>

 <li>analitza/mathmlexpressionwriter.cpp <span style="color: grey">(b70a1ca)</span></li>

 <li>analitza/mathmlpresentationexpressionwriter.h <span style="color: grey">(6c6419e)</span></li>

 <li>analitza/mathmlpresentationexpressionwriter.cpp <span style="color: grey">(3efc35b)</span></li>

 <li>analitza/matrix.h <span style="color: grey">(69c109d)</span></li>

 <li>analitza/matrix.cpp <span style="color: grey">(6714ac8)</span></li>

 <li>analitza/object.h <span style="color: grey">(aafd114)</span></li>

 <li>analitza/object.cpp <span style="color: grey">(b485d07)</span></li>

 <li>analitza/operator.h <span style="color: grey">(0e61b21)</span></li>

 <li>analitza/operator.cpp <span style="color: grey">(a2d8501)</span></li>

 <li>analitza/stringexpressionwriter.h <span style="color: grey">(e8c0ccd)</span></li>

 <li>analitza/stringexpressionwriter.cpp <span style="color: grey">(90594e8)</span></li>

 <li>analitza/value.h <span style="color: grey">(89bc2ef)</span></li>

 <li>analitza/value.cpp <span style="color: grey">(7d4e49a)</span></li>

 <li>analitza/variable.h <span style="color: grey">(2f8514c)</span></li>

 <li>analitza/variable.cpp <span style="color: grey">(b98365e)</span></li>

 <li>analitza/vector.h <span style="color: grey">(338bf81)</span></li>

 <li>analitza/vector.cpp <span style="color: grey">(d7b5836)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/115439/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>




  </div>
 </body>
</html>