LCOV - code coverage report
Current view: top level - app/src/utils - stringify.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 30 58 51.7 %
Date: 2023-08-17 16:45:52 Functions: 9 16 56.2 %

          Line data    Source code
       1             : #include "utils/stringify.hpp"
       2             : 
       3             : #include <cassert>
       4             : #include <cstring>
       5             : 
       6             : using namespace std;
       7             : using namespace utils::stringify;
       8             : 
       9             : unsigned stringify<float>::PRECISION  = 7;
      10             : unsigned stringify<double>::PRECISION = 15;
      11             : 
      12       19339 : int stringify<int>::fromString(const string &s) {
      13       19339 :     return atoi(s.c_str());
      14             : }
      15             : 
      16       19304 : string stringify<int>::toString(const int &s) {
      17       19304 :     return to_string(s);
      18             : }
      19             : 
      20           0 : long stringify<long>::fromString(const string &s) {
      21           0 :     return strtol(s.c_str(), nullptr, 10);
      22             : }
      23             : 
      24           0 : string stringify<long>::toString(const long &s) {
      25           0 :     return to_string(s);
      26             : }
      27             : 
      28      187027 : unsigned long stringify<unsigned long>::fromString(const string &s) {
      29      187027 :     return strtoul(s.c_str(), nullptr, 10);
      30             : }
      31             : 
      32       19304 : string stringify<unsigned long>::toString(const unsigned long &s) {
      33       19304 :     return to_string(s);
      34             : }
      35             : 
      36      284211 : bool stringify<bool>::fromString(const string &s) {
      37      284211 :     if(s == "1")
      38             :         return true;
      39      227931 :     else if(s == "0")
      40             :         return false;
      41             :     else
      42           0 :         throw runtime_error("Invalid bool string: " + s);
      43             : }
      44             : 
      45           0 : string stringify<bool>::toString(const bool &t) {
      46           0 :     return t ? "1" : "0";
      47             : }
      48             : 
      49           0 : float stringify<float>::fromString(const string &s) {
      50           0 :     return (float)atof(s.c_str());
      51             : }
      52             : 
      53           0 : string stringify<float>::toString(const float &s) {
      54           0 :     char bufChar[32];
      55           0 :     sprintf(bufChar, "%.*f", PRECISION, s);
      56           0 :     string buf(bufChar);
      57             :     // clang-format off
      58           0 :     while(
      59           0 :         buf.size() > 1 &&
      60           0 :         buf.find('.') != string::npos &&
      61           0 :         (buf[buf.size() - 1] == '0' || buf[buf.size() - 1] == '.')
      62             :     ) {
      63             :         // clang-format on
      64           0 :         buf.erase(buf.size() - 1);
      65             :     }
      66           0 :     return string(buf);
      67             : }
      68             : 
      69      655460 : double stringify<double>::fromString(const string &s) {
      70      655460 :     return atof(s.c_str());
      71             : }
      72             : 
      73       57912 : string stringify<double>::toString(const double &s) {
      74       57912 :     char bufChar[32];
      75       57912 :     sprintf(bufChar, "%.*f", PRECISION, s);
      76       57912 :     string buf(bufChar);
      77             :     // clang-format off
      78      189414 :     while(
      79      378761 :         buf.size() > 1 &&
      80      189414 :         buf.find('.') != string::npos &&
      81      188676 :         (buf[buf.size() - 1] == '0' || buf[buf.size() - 1] == '.')
      82             :     ) {
      83             :         // clang-format on
      84      131502 :         buf.erase(buf.size() - 1);
      85             :     }
      86      173736 :     return string(buf);
      87             : }
      88             : 
      89       49777 : string stringify<string>::fromString(const string &s) {
      90       49777 :     return s;
      91             : }
      92             : 
      93           0 : string stringify<string>::toString(const string &s) {
      94           0 :     return s;
      95             : }
      96             : 
      97           0 : string stringify<vector<bool>>::toString(const std::vector<bool> &t) {
      98           0 :     string s(t.size(), '-');
      99             : 
     100           0 :     for(size_t i = 0; i < t.size(); ++i) {
     101           0 :         string bs = stringify<bool>::toString(t[i]);
     102           0 :         assert(bs.size() == 1);
     103           0 :         s[i] = bs[0];
     104             :     }
     105             : 
     106           0 :     return s;
     107             : }
     108             : 
     109       55306 : vector<bool> stringify<vector<bool>>::fromString(const std::string &s) {
     110       55306 :     std::vector<bool> ret(s.size());
     111             : 
     112      311864 :     for(size_t i = 0; i < s.size(); ++i) {
     113      513116 :         ret[i] = stringify<bool>::fromString(s.substr(i, 1));
     114             :     }
     115             : 
     116       55306 :     return ret;
     117             : }

Generated by: LCOV version 1.14