LCOV - code coverage report
Current view: top level - stdcasa/StdCasa - string_conversions.hpp (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 2 27 7.4 %
Date: 2024-12-11 20:54:31 Functions: 5 19 26.3 %

          Line data    Source code
       1             : #ifndef __casac_string_conversions__
       2             : #define __casac_string_conversions__
       3             : 
       4             : #include <cstdlib>
       5             : 
       6             : typedef unsigned int uInt;
       7             : 
       8           0 : bool stringtobool( const std::string &str ) {
       9           0 :     const char *data = str.data();
      10           0 :     while ( *data && isspace(*data) ) ++data;
      11           0 :     if (!strncasecmp(data,"true",4)) return true;
      12           0 :     if (!strncasecmp(data,"false",5)) return false;
      13           0 :     if (isdigit(*data) || *data == '+' || *data == '-') {
      14           0 :         const char *digit = data;
      15           0 :         while (*digit == '+' || *digit == '-') ++digit;
      16           0 :         if (isdigit(*digit)) {
      17           0 :             while (*digit && (isdigit(*digit))) ++digit;
      18           0 :             if (*digit == '.') return atof(data) != 0.0 ? true : false;
      19           0 :             else return atoi(data) != 0 ? true : false;
      20             :         } else {
      21           0 :             return false;
      22             :         }
      23             :     }
      24           0 :     return false;
      25             : }
      26             : 
      27           0 : inline int stringtoint( const std::string &str ) {
      28           0 :     const char *data = str.data();
      29           0 :     return atoi(data);
      30             : }
      31             : 
      32           0 : inline unsigned int stringtouInt( const std::string &str ) {
      33           0 :     const char *data = str.data();
      34           0 :     return strtoul(data, NULL, 10);
      35             : }
      36             : 
      37             : inline long long stringtolong( const std::string &str ) {
      38             :     const char *data = str.data();
      39             :     return (long long)atol(data);
      40             : }
      41             : 
      42             : 
      43           0 : inline double stringtodouble( const std::string &str ) {
      44           0 :     const char *data = str.data();
      45           0 :     return atof(data);
      46             : }
      47             : 
      48             : #define STRINGTOCOMPLEX_DEFINITION(TYPE,NAME)           \
      49             : inline TYPE NAME( const std::string &str ) {                \
      50             :     const char *data = str.data();                      \
      51             :     return TYPE(atof(data),0.0);                        \
      52             : }
      53             : 
      54           0 : STRINGTOCOMPLEX_DEFINITION(std::complex<double>,stringtocomplex)
      55             : 
      56             : #define TOSTRHELPERS(NAME,PTR,NEW)                                      \
      57             : inline std::string PTR bool ## NAME( bool b ) {                         \
      58             :     return b ? NEW std::string("true") : NEW std::string("false");  \
      59             : }                                                                       \
      60             : inline std::string PTR NAME( bool b ) {                                 \
      61             :     return b ? NEW std::string("true") : NEW std::string("false");  \
      62             : }                                                                       \
      63             : inline std::string PTR int ## NAME( long i ) {                  \
      64             :     char buff[256];                                                     \
      65             :     sprintf( buff, "%ld", i );                                                \
      66             :     return NEW std::string( (const char *) buff );                      \
      67             : }                                                                       \
      68             : inline std::string PTR NAME( long i ) {                                 \
      69             :     char buff[256];                                                     \
      70             :     sprintf( buff, "%ld", i );                                                \
      71             :     return NEW std::string( (const char *) buff );                      \
      72             : }                                                                       \
      73             : inline std::string PTR uInt ## NAME( unsigned long i ) {                        \
      74             :     char buff[256];                                                     \
      75             :     sprintf( buff, "%lu", i );                                                \
      76             :     return NEW std::string( (const char *) buff );                      \
      77             : }                                                                       \
      78             : inline std::string PTR NAME( unsigned long i ) {                                        \
      79             :     char buff[256];                                                     \
      80             :     sprintf( buff, "%lu", i );                                                \
      81             :     return NEW std::string( (const char *) buff );                      \
      82             : }                                                                       \
      83             : inline std::string PTR long ## NAME( long long  l ) {                                   \
      84             :     char buff[256];                                                     \
      85             :     sprintf( buff, "%lld", l );                                               \
      86             :     return NEW std::string( (const char *) buff );                      \
      87             : }                                                                       \
      88             : inline std::string PTR NAME( long long l ) {                                    \
      89             :     char buff[256];                                                     \
      90             :     sprintf( buff, "%lld", l );                                               \
      91             :     return NEW std::string( (const char *) buff );                      \
      92             : }                                                                       \
      93             : inline std::string PTR double ## NAME( double d ) {                     \
      94             :     char buff[256];                                                     \
      95             :     sprintf( buff, "%f", d );                                         \
      96             :     return NEW std::string( (const char *) buff );                      \
      97             : }                                                                       \
      98             : inline std::string PTR NAME( double d ) {                               \
      99             :     char buff[256];                                                     \
     100             :     sprintf( buff, "%f", d );                                         \
     101             :     return NEW std::string( (const char *) buff );                      \
     102             : }                                                                       \
     103             : inline std::string PTR complex ## NAME( const std::complex<double> &c ) {\
     104             :     char buff[512];                                                     \
     105             :     sprintf( buff, "(%f,%f)", c.real(), c.imag() );                   \
     106             :     return NEW std::string( (const char *) buff );                      \
     107             : }                                                                       \
     108             : inline std::string PTR NAME( const std::complex<double> &c ) {                \
     109             :     char buff[512];                                                     \
     110             :     sprintf( buff, "(%f,%f)", c.real(), c.imag() );                   \
     111             :     return NEW std::string( (const char *) buff );                      \
     112             : }
     113             : 
     114       26116 : TOSTRHELPERS(tostring,,)
     115           0 : TOSTRHELPERS(tostringptr,*,new)
     116             : 
     117         248 : inline std::string std_stringtostring(std::string s) { return s; }
     118             : 
     119             : #endif

Generated by: LCOV version 1.16