From ad50cfaf3c7c773fa99d2d6ad1602803e4658c95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Oberhuber?= <oberhuber.tomas@gmail.com>
Date: Fri, 28 Sep 2018 12:39:07 +0200
Subject: [PATCH] Fixing templated constructor of String, make it explicit +
 other fixes in String.

---
 src/Benchmarks/BLAS/tnl-benchmark-blas.h | 10 +++++-----
 src/TNL/String.cpp                       |  4 ++--
 src/TNL/String.h                         | 21 +++++++++++----------
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/Benchmarks/BLAS/tnl-benchmark-blas.h b/src/Benchmarks/BLAS/tnl-benchmark-blas.h
index 4f6d63022d..6419087a93 100644
--- a/src/Benchmarks/BLAS/tnl-benchmark-blas.h
+++ b/src/Benchmarks/BLAS/tnl-benchmark-blas.h
@@ -43,7 +43,7 @@ runBlasBenchmarks( Benchmark & benchmark,
                            metadata );
    for( std::size_t size = minSize; size <= maxSize; size *= 2 ) {
       benchmark.setMetadataColumns( Benchmark::MetadataColumns({
-         {"size", size},
+         {"size", String( size ) },
       } ));
       benchmarkArrayOperations< Real >( benchmark, loops, size );
    }
@@ -53,7 +53,7 @@ runBlasBenchmarks( Benchmark & benchmark,
                            metadata );
    for( std::size_t size = minSize; size <= maxSize; size *= sizeStepFactor ) {
       benchmark.setMetadataColumns( Benchmark::MetadataColumns({
-         {"size", size},
+         { "size", String( size ) },
       } ));
       benchmarkVectorOperations< Real >( benchmark, loops, size );
    }
@@ -63,9 +63,9 @@ runBlasBenchmarks( Benchmark & benchmark,
                            metadata );
    for( std::size_t size = minSize; size <= maxSize; size *= 2 ) {
       benchmark.setMetadataColumns( Benchmark::MetadataColumns({
-         {"rows", size},
-         {"columns", size},
-         {"elements per row", elementsPerRow},
+         {"rows", String( size ) },
+         {"columns", String( size ) },
+         {"elements per row", String( elementsPerRow ) },
       } ));
       benchmarkSpmvSynthetic< Real >( benchmark, loops, size, elementsPerRow );
    }
diff --git a/src/TNL/String.cpp b/src/TNL/String.cpp
index 3f733526d9..40e36bbde0 100644
--- a/src/TNL/String.cpp
+++ b/src/TNL/String.cpp
@@ -29,10 +29,10 @@ String::String()
    setString( nullptr );
 }
 
-String::String( char* c, int prefix_cut_off, int sufix_cut_off )
+String::String( const char* str )
    : string( nullptr ), length( 0 )
 {
-   setString( c, prefix_cut_off, sufix_cut_off );
+   setString( str );
 }
 
 String::String( const char* c, int prefix_cut_off, int sufix_cut_off )
diff --git a/src/TNL/String.h b/src/TNL/String.h
index 0868ac44a4..5b153fb267 100644
--- a/src/TNL/String.h
+++ b/src/TNL/String.h
@@ -37,35 +37,36 @@ class String
 public:
    //! Basic constructor
    String();
+   
+   //! Constructor from const char*
+   String( const char* str );   
 
    //! Constructor with char pointer
    /*! @param prefix_cut_off says length of the prefix that is going to be omitted and
        @param sufix_cut_off says the same about sufix.
     */
    String( const char* c,
-           int prefix_cut_off = 0,
-           int sufix_cut_off = 0 );
-   
-   String( char* c,
-           int prefix_cut_off = 0,
+           int prefix_cut_off,
            int sufix_cut_off = 0 );
 
-
-   static String getType();
-
    //! Copy constructor
    String( const String& str );
-
+   
    //! Convert anything to a string
    template< typename T >
+   explicit
    String( T value )
       : string( nullptr ), length( 0 )
    {
-      setString( convertToString( value ).getString() );
+      std::stringstream str;
+      str << value;
+      setString( str.str().data() );
    }
 
    //! Destructor
    ~String();
+   
+   static String getType();
 
    //! Return length of the string
    int getLength() const;
-- 
GitLab