← Back to team overview

kicad-developers team mailing list archive

[PATCH] Fix building benchmark test

 

Passing a wxString to std::ifstream::ifstream() is ambiguous, at least on MSVC.
---
 tools/io_benchmark/io_benchmark.cpp          | 49 ++++++++++++++--------------
 tools/io_benchmark/stdstream_line_reader.cpp |  8 ++---
 tools/io_benchmark/stdstream_line_reader.h   |  4 ++-
 3 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/tools/io_benchmark/io_benchmark.cpp b/tools/io_benchmark/io_benchmark.cpp
index 1d7071199..9442d9317 100644
--- a/tools/io_benchmark/io_benchmark.cpp
+++ b/tools/io_benchmark/io_benchmark.cpp
@@ -32,6 +32,7 @@
 #include <fstream>
 
 #include <wx/wfstream.h>
+#include <wx/filename.h>
 
 #include "stdstream_line_reader.h"
 
@@ -55,7 +56,7 @@ struct BENCH_REPORT
 };
 
 
-using BENCH_FUNC = std::function<void(const wxString&, int, BENCH_REPORT&)>;
+using BENCH_FUNC = std::function<void(const wxFileName&, int, BENCH_REPORT&)>;
 
 
 struct BENCHMARK
@@ -70,13 +71,13 @@ struct BENCHMARK
  * Benchmark using a raw std::ifstream, with no LINE_READER
  * wrapper. The stream is recreated for each cycle.
  */
-static void bench_fstream( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_fstream( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
     std::string line;
 
     for( int i = 0; i < aReps; ++i)
     {
-        std::ifstream fstr( aFile );
+        std::ifstream fstr( aFile.GetFullPath().ToUTF8() );
 
         while( getline( fstr, line ) )
         {
@@ -93,10 +94,10 @@ static void bench_fstream( const wxString& aFile, int aReps, BENCH_REPORT& repor
  * Benchmark using a raw std::ifstream, with no LINE_READER
  * wrapper. The stream is not recreated for each cycle, just reset.
  */
-static void bench_fstream_reuse( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_fstream_reuse( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
     std::string line;
-    std::ifstream fstr( aFile );
+    std::ifstream fstr( aFile.GetFullPath().ToUTF8() );
 
     for( int i = 0; i < aReps; ++i)
     {
@@ -118,11 +119,11 @@ static void bench_fstream_reuse( const wxString& aFile, int aReps, BENCH_REPORT&
  * The LINE_READER is recreated for each cycle.
  */
 template<typename LR>
-static void bench_line_reader( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_line_reader( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
     for( int i = 0; i < aReps; ++i)
     {
-        LR fstr( aFile );
+        LR fstr( aFile.GetFullName() );
         while( fstr.ReadLine() )
         {
             report.linesRead++;
@@ -137,9 +138,9 @@ static void bench_line_reader( const wxString& aFile, int aReps, BENCH_REPORT& r
  * The LINE_READER is rewound for each cycle, not recreated.
  */
 template<typename LR>
-static void bench_line_reader_reuse( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_line_reader_reuse( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
-    LR fstr( aFile );
+    LR fstr( aFile.GetFullName() );
     for( int i = 0; i < aReps; ++i)
     {
 
@@ -160,13 +161,13 @@ static void bench_line_reader_reuse( const wxString& aFile, int aReps, BENCH_REP
  * The wxInputStream is recreated for each cycle.
  */
 template<typename S>
-static void bench_wxis( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_wxis( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
-    S fileStream( aFile );
+    S fileStream( aFile.GetFullName() );
 
     for( int i = 0; i < aReps; ++i)
     {
-        INPUTSTREAM_LINE_READER istr( &fileStream, aFile );
+        INPUTSTREAM_LINE_READER istr( &fileStream, aFile.GetFullName() );
 
         while( istr.ReadLine() )
         {
@@ -185,10 +186,10 @@ static void bench_wxis( const wxString& aFile, int aReps, BENCH_REPORT& report )
  * The wxInputStream is reset for each cycle.
  */
 template<typename S>
-static void bench_wxis_reuse( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_wxis_reuse( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
-    S fileStream( aFile );
-    INPUTSTREAM_LINE_READER istr( &fileStream, aFile );
+    S fileStream( aFile.GetFullName() );
+    INPUTSTREAM_LINE_READER istr( &fileStream, aFile.GetFullName() );
 
     for( int i = 0; i < aReps; ++i)
     {
@@ -209,14 +210,14 @@ static void bench_wxis_reuse( const wxString& aFile, int aReps, BENCH_REPORT& re
  * The wxInputStream is recreated for each cycle.
  */
 template<typename WXIS>
-static void bench_wxbis( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_wxbis( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
-    WXIS fileStream( aFile );
+    WXIS fileStream( aFile.GetFullName() );
     wxBufferedInputStream bufferedStream( fileStream );
 
     for( int i = 0; i < aReps; ++i)
     {
-        INPUTSTREAM_LINE_READER istr( &bufferedStream, aFile );
+        INPUTSTREAM_LINE_READER istr( &bufferedStream, aFile.GetFullName() );
 
         while( istr.ReadLine() )
         {
@@ -235,12 +236,12 @@ static void bench_wxbis( const wxString& aFile, int aReps, BENCH_REPORT& report
  * The wxInputStream is reset for each cycle.
  */
 template<typename WXIS>
-static void bench_wxbis_reuse( const wxString& aFile, int aReps, BENCH_REPORT& report )
+static void bench_wxbis_reuse( const wxFileName& aFile, int aReps, BENCH_REPORT& report )
 {
-    WXIS fileStream( aFile );
+    WXIS fileStream( aFile.GetFullName() );
     wxBufferedInputStream bufferedStream( fileStream );
 
-    INPUTSTREAM_LINE_READER istr( &bufferedStream, aFile );
+    INPUTSTREAM_LINE_READER istr( &bufferedStream, aFile.GetFullName() );
 
     for( int i = 0; i < aReps; ++i)
     {
@@ -310,7 +311,7 @@ static wxString getBenchDescriptions()
 
 
 BENCH_REPORT executeBenchMark( const BENCHMARK& aBenchmark, int aReps,
-        const wxString& aFilename )
+        const wxFileName& aFilename )
 {
     BENCH_REPORT report = {};
 
@@ -345,7 +346,7 @@ int main( int argc, char* argv[] )
         return BAD_ARGS;
     }
 
-    wxString inFile( argv[1] );
+    wxFileName inFile( argv[1] );
 
     long reps = 0;
     wxString( argv[2] ).ToLong( &reps );
@@ -357,7 +358,7 @@ int main( int argc, char* argv[] )
 
     os << "IO Bench Mark Util" << std::endl;
 
-    os << "  Benchmark file: " << inFile << std::endl;
+    os << "  Benchmark file: " << inFile.GetFullName() << std::endl;
     os << "  Repetitions:    " << (int) reps << std::endl;
     os << std::endl;
 
diff --git a/tools/io_benchmark/stdstream_line_reader.cpp b/tools/io_benchmark/stdstream_line_reader.cpp
index ce0042f77..a45131b86 100644
--- a/tools/io_benchmark/stdstream_line_reader.cpp
+++ b/tools/io_benchmark/stdstream_line_reader.cpp
@@ -67,19 +67,19 @@ void STDISTREAM_LINE_READER::setStream( std::istream& aStream )
 }
 
 
-IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxString& aFileName ) throw( IO_ERROR ) :
-        m_fStream( aFileName )
+IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR ) :
+        m_fStream( aFileName.GetFullName().ToUTF8() )
 {
     if( !m_fStream.is_open() )
     {
         wxString msg = wxString::Format(
-            _( "Unable to open filename '%s' for reading" ), aFileName.GetData() );
+            _( "Unable to open filename '%s' for reading" ), aFileName.GetFullPath().GetData() );
         THROW_IO_ERROR( msg );
     }
 
     setStream( m_fStream );
 
-    source = aFileName;
+    source = aFileName.GetFullName();
 }
 
 
diff --git a/tools/io_benchmark/stdstream_line_reader.h b/tools/io_benchmark/stdstream_line_reader.h
index 1fa18a262..2cee6090c 100644
--- a/tools/io_benchmark/stdstream_line_reader.h
+++ b/tools/io_benchmark/stdstream_line_reader.h
@@ -24,6 +24,8 @@
 #ifndef FSTREAM_LINE_READER_H
 #define FSTREAM_LINE_READER_H
 
+#include <wx/filename.h>
+
 #include <richio.h>
 
 #include <istream>
@@ -59,7 +61,7 @@ class IFSTREAM_LINE_READER : public STDISTREAM_LINE_READER
 {
 public:
 
-    IFSTREAM_LINE_READER( const wxString& aFileName ) throw( IO_ERROR );
+    IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR );
 
     void Rewind();
 

Follow ups