Piac test code coverage report
Current view: top level - src - string_util.cpp (source / functions) Hit Total Coverage
Commit: Piac-DEBUG Lines: 32 32 100.0 %
Date: 2022-12-16 13:46:15 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 33 52 63.5 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/string_util.cpp
       4                 :            :   \copyright 2022-2025 J. Bakosi,
       5                 :            :              All rights reserved. See the LICENSE file for details.
       6                 :            :   \brief     Piac string utilities
       7                 :            : */
       8                 :            : // *****************************************************************************
       9                 :            : 
      10                 :            : #include <regex>
      11                 :            : 
      12                 :            : #include "string_util.hpp"
      13                 :            : 
      14                 :            : void
      15                 :         67 : piac::trim( std::string& s )
      16                 :            : // ****************************************************************************
      17                 :            : //  Trim a string to remove white space from front and back
      18                 :            : //! \param[in,out] s String to remove white spaces from
      19                 :            : // ****************************************************************************
      20                 :            : {
      21         [ +  - ]:        134 :   const std::string WHITESPACE( " \n\r\t\f\v" );
      22                 :         67 :   auto p = s.find_first_not_of( WHITESPACE );
      23 [ +  + ][ +  - ]:         67 :   s = p == std::string::npos ? "" : s.substr( p );
         [ +  - ][ +  + ]
      24                 :         67 :   p = s.find_last_not_of( WHITESPACE );
      25 [ +  + ][ +  - ]:         67 :   s = p == std::string::npos ? "" : s.substr( 0, p + 1 );
         [ +  - ][ +  + ]
      26                 :         67 : }
      27                 :            : 
      28                 :            : std::vector< std::string >
      29                 :         58 : piac::tokenize( const std::string& s )
      30                 :            : // ****************************************************************************
      31                 :            : //  Tokenize, i.e., break up, a string along white space into words
      32                 :            : //! \param[in] s String to tokenize
      33                 :            : //! \return Tokenized string
      34                 :            : // ****************************************************************************
      35                 :            : {
      36         [ -  + ]:         58 :   if (s.empty()) return {};
      37                 :            :   using std::regex;
      38                 :            :   using std::string;
      39                 :            :   using std::sregex_token_iterator;
      40         [ +  - ]:        116 :   regex re( "[ \n\r\t\f\v]" );
      41         [ +  - ]:        116 :   sregex_token_iterator it( begin(s), end(s), re, -1 );
      42         [ +  - ]:        116 :   sregex_token_iterator reg_end;
      43                 :        116 :   std::vector< std::string > tokens;
      44 [ +  - ][ +  + ]:        179 :   for (; it != reg_end; ++it) tokens.push_back( it->str() );
         [ +  - ][ +  - ]
                 [ +  - ]
      45                 :         58 :   return tokens;
      46                 :            : }
      47                 :            : 
      48                 :            : [[nodiscard]] int
      49                 :         15 : piac::wordcount( const std::string& s )
      50                 :            : // ****************************************************************************
      51                 :            : // Count the number of words in a string
      52                 :            : //! \param[in] s String to count words in
      53                 :            : //! \return Number of words found in string
      54                 :            : // ****************************************************************************
      55                 :            : {
      56                 :         15 :   auto str = s.data();
      57         [ -  + ]:         15 :   if (str == nullptr) return 0;
      58                 :         15 :   bool inSpaces = true;
      59                 :         15 :   int numWords = 0;
      60         [ +  + ]:       2555 :   while (*str != '\0') {
      61         [ +  + ]:       2540 :     if (std::isspace(*str)) {
      62                 :        359 :       inSpaces = true;
      63         [ +  + ]:       2181 :     } else if (inSpaces) {
      64                 :        374 :       numWords++;
      65                 :        374 :       inSpaces = false;
      66                 :            :     }
      67                 :       2540 :      ++str;
      68                 :            :   }
      69                 :         15 :   return numWords;
      70                 :            : }
      71                 :            : 
      72                 :            : [[nodiscard]] std::pair< std::string, std::string >
      73                 :          3 : piac::split( std::string s, const std::string& delim )
      74                 :            : // ****************************************************************************
      75                 :            : //  Split string into two substrings at delimiter
      76                 :            : //! \param[in] s String to split
      77                 :            : //! \param[in] delim Delimiter at which to split
      78                 :            : // ****************************************************************************
      79                 :            : {
      80                 :          3 :   trim( s );
      81                 :          3 :   auto p = s.find_last_of( delim );
      82 [ -  + ][ -  - ]:          3 :   return { s.substr(0,p), p == std::string::npos ? "" : s.substr(p+1) };
         [ +  - ][ -  + ]
      83                 :            : }

Generated by: LCOV version 1.14