changeset c81407818741 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=c81407818741
description:
        base: Clean up redundant string functions and use C++11

        This patch does a bit of housekeeping on the string helper functions
        and relies on the C++11 standard library where possible. It also does
        away with our custom string hash as an implementation is already part
        of the standard library.

diffstat:

 src/base/statistics.hh      |    6 +-
 src/base/stats/text.cc      |    8 +-
 src/base/str.cc             |  272 --------------------------------------------
 src/base/str.hh             |  116 +++++++++++++----
 src/cpu/o3/lsq_unit_impl.hh |    2 +-
 src/dev/uart8250.cc         |    1 -
 src/sim/serialize.cc        |   19 +--
 7 files changed, 97 insertions(+), 327 deletions(-)

diffs (truncated from 578 to 300 lines):

diff -r 3f943443ae30 -r c81407818741 src/base/statistics.hh
--- a/src/base/statistics.hh    Sat Sep 20 17:17:47 2014 -0400
+++ b/src/base/statistics.hh    Sat Sep 20 17:17:49 2014 -0400
@@ -741,7 +741,7 @@
 class ProxyInfo : public ScalarInfo
 {
   public:
-    std::string str() const { return to_string(value()); }
+    std::string str() const { return std::to_string(value()); }
     size_type size() const { return 1; }
     bool check() const { return true; }
     void prepare() { }
@@ -2170,7 +2170,7 @@
     const VResult &result() const { return vresult; }
     Result total() const { return vresult[0]; };
     size_type size() const { return 1; }
-    std::string str() const { return to_string(vresult[0]); }
+    std::string str() const { return std::to_string(vresult[0]); }
 };
 
 template <class T>
@@ -2200,7 +2200,7 @@
         size_type size = this->size();
         std::string tmp = "(";
         for (off_type i = 0; i < size; i++)
-            tmp += csprintf("%s ",to_string(vresult[i]));
+            tmp += csprintf("%s ", std::to_string(vresult[i]));
         tmp += ")";
         return tmp;
     }
diff -r 3f943443ae30 -r c81407818741 src/base/stats/text.cc
--- a/src/base/stats/text.cc    Sat Sep 20 17:17:47 2014 -0400
+++ b/src/base/stats/text.cc    Sat Sep 20 17:17:49 2014 -0400
@@ -284,7 +284,7 @@
         // the case where there are no subnames) and append it to the
         // base name.
         if (forceSubnames)
-            print.name = base + (havesub ? subnames[0] : to_string(0));
+            print.name = base + (havesub ? subnames[0] : std::to_string(0));
         print.value = vec[0];
         print(stream);
         return;
@@ -300,7 +300,7 @@
             if (havesub && (i >= subnames.size() || subnames[i].empty()))
                 continue;
 
-            print.name = base + (havesub ? subnames[i] : to_string(i));
+            print.name = base + (havesub ? subnames[i] : std::to_string(i));
             print.desc = subdescs.empty() ? desc : subdescs[i];
 
             print.update(vec[i], _total);
@@ -355,7 +355,7 @@
     init(text, info);
 
     name = info.name + "_" +
-        (info.subnames[i].empty() ? (to_string(i)) : info.subnames[i]);
+        (info.subnames[i].empty() ? (std::to_string(i)) : info.subnames[i]);
 
     if (!info.subdescs[i].empty())
         desc = info.subdescs[i];
@@ -605,7 +605,7 @@
         }
 
         print.name = info.name + "_" +
-            (havesub ? info.subnames[i] : to_string(i));
+            (havesub ? info.subnames[i] : std::to_string(i));
         print.desc = info.desc;
         print.vec = yvec;
         print.total = total;
diff -r 3f943443ae30 -r c81407818741 src/base/str.cc
--- a/src/base/str.cc   Sat Sep 20 17:17:47 2014 -0400
+++ b/src/base/str.cc   Sat Sep 20 17:17:49 2014 -0400
@@ -28,14 +28,9 @@
  * Authors: Nathan Binkert
  */
 
-#include <cctype>
-#include <cstring>
-#include <iostream>
-#include <limits>
 #include <string>
 #include <vector>
 
-#include "base/intmath.hh"
 #include "base/str.hh"
 
 using namespace std;
@@ -106,270 +101,3 @@
 
     v.push_back(s.substr(first));
 }
-
-/**
- * @todo This function will not handle the smallest negative decimal
- * value for a signed type
- */
-
-template <class T>
-inline bool
-__to_number(string value, T &retval)
-{
-    static const T maxnum = ((T)-1);
-    static const bool sign = numeric_limits<T>::is_signed;
-    static const int bits = numeric_limits<T>::digits;
-    static const T hexmax = maxnum & (((T)1 << (bits - 4)) - 1);
-    static const T octmax = maxnum & (((T)1 << (bits - 3)) - 1);
-    static const T signmax = numeric_limits<T>::max();
-    static const T decmax = signmax / 10;
-
-#if 0
-    cout << "maxnum =  0x" << hex << (unsigned long long)maxnum << "\n"
-         << "sign =    0x" << hex << (unsigned long long)sign << "\n"
-         << "hexmax =  0x" << hex << (unsigned long long)hexmax << "\n"
-         << "octmax =  0x" << hex << (unsigned long long)octmax << "\n"
-         << "signmax = 0x" << hex << (unsigned long long)signmax << "\n"
-         << "decmax =  0x" << hex << (unsigned long long)decmax << "\n";
-#endif
-
-    eat_white(value);
-
-    bool negative = false;
-    bool hex = false;
-    bool oct = false;
-    int last = value.size() - 1;
-    retval = 0;
-    int i = 0;
-
-    char c = value[i];
-    if (!isDec(c)) {
-        if (c == '-' && sign)
-            negative = true;
-        else
-            return false;
-    }
-    else {
-        retval += c - '0';
-        if (last == 0) return true;
-    }
-
-    if (c == '0')
-        oct = true;
-
-    c = value[++i];
-    if (oct) {
-        if (sign && negative)
-            return false;
-
-        if (!isOct(c)) {
-            if (c == 'X' || c == 'x') {
-                hex = true;
-                oct = false;
-            } else
-                return false;
-        }
-        else
-            retval += c - '0';
-    } else if (!isDec(c))
-        goto multiply;
-    else {
-        if (sign && negative && c == '0')
-            return false;
-
-        retval *= 10;
-        retval += c - '0';
-        if (last == 1) {
-            if (sign && negative) retval = -retval;
-            return true;
-        }
-    }
-
-    if (hex) {
-        if (last == 1)
-            return false;
-
-        for (i = 2; i <= last ; i++) {
-            c = value[i];
-            if (!isHex(c))
-                return false;
-
-            if (retval > hexmax) return false;
-            retval *= 16;
-            retval += hex2Int(c);
-        }
-        return true;
-    } else if (oct) {
-        for (i = 2; i <= last ; i++) {
-            c = value[i];
-            if (!isOct(c))
-                return false;
-
-            if (retval > octmax) return false;
-            retval *= 8;
-            retval += (c - '0');
-        }
-        return true;
-    }
-
-    for (i = 2; i < last ; i++) {
-        c = value[i];
-        if (!isDec(c))
-            goto multiply;
-
-        if (retval > decmax) return false;
-        bool atmax = retval == decmax;
-        retval *= 10;
-        retval += c - '0';
-        if (atmax && retval < decmax) return false;
-        if (sign && (retval & ((T)1 << (sizeof(T) * 8 - 1))))
-            return false;
-    }
-
-    c = value[last];
-    if (isDec(c)) {
-
-        if (retval > decmax) return false;
-        bool atmax = retval == decmax;
-        retval *= 10;
-        retval += c - '0';
-        if (atmax && retval < decmax) return false;
-        if (sign && negative) {
-            if ((retval & ((T)1 << (sizeof(T) * 8 - 1))) &&
-                retval >= (T)-signmax)
-                return false;
-            retval = -retval;
-        }
-        else
-            if (sign && (retval & ((T)1 << ((sizeof(T) * 8) - 1))))
-                return false;
-        return true;
-    }
-
-  multiply:
-    signed long long mult = 1;
-    T val;
-    switch (c) {
-      case 'k':
-      case 'K':
-        if (i != last) return false;
-        mult = 1024;
-        val = signmax / mult;
-        break;
-      case 'm':
-      case 'M':
-        if (i != last) return false;
-        mult = 1024 * 1024;
-        val = signmax / mult;
-        break;
-      case 'g':
-      case 'G':
-        if (i != last) return false;
-        mult = 1024 * 1024 * 1024;
-        val = signmax / mult;
-        break;
-      case 'e':
-      case 'E':
-        if (i >= last) return false;
-
-        mult = 0;
-        for (i++; i <= last; i++) {
-            c = value[i];
-            if (!isDec(c))
-                return false;
-
-            mult *= 10;
-            mult += c - '0';
-        }
-
-        for (i = 0; i < mult; i++) {
-            if (retval > signmax / 10)
-                return false;
-            retval *= 10;
-            if (sign && (retval & ((T)1 << (sizeof(T) * 8 - 1))))
-                return false;
-        }
-        if (sign && negative) {
-            if ((retval & ((T)1 << (sizeof(T) * 8 - 1))) &&
-                retval >= (T)-signmax)
-                return false;
-            retval = -retval;
-        }
-        else
-            if (sign && (retval & ((T)1 << ((sizeof(T) * 8) - 1))))
-                return false;
-
-        return true;
-
-      default:
-        return false;
-    }
-
-    if (sign && negative)
-        return false;
-
-    if (mult > (unsigned long long)signmax)
-        return false;
-
-    if (retval > val)
-        return false;
-
-    retval *= mult;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to