LCOV - code coverage report
Current view: top level - util/cgm - CubitString.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 4 4 100.0 %
Date: 2020-06-30 00:58:45 Functions: 1 1 100.0 %
Branches: 8 16 50.0 %

           Branch data     Line data    Source code
       1                 :            : //- Class: CubitString
       2                 :            : //- 
       3                 :            : //- Description: This file defines the CubitString class which is a 
       4                 :            : //- simple implementation of a character string. Basic functionality 
       5                 :            : //- is provided as well as equality/inequality tests, subscripting into 
       6                 :            : //- a string, searching a string for another string.
       7                 :            : //-
       8                 :            : 
       9                 :            : #if !defined(CUBITSTRING_HPP)
      10                 :            : #define CUBITSTRING_HPP
      11                 :            : 
      12                 :            : #include <sstream>
      13                 :            : #include <vector>
      14                 :            : #include <string>
      15                 :            : 
      16                 :            : #include "CGMUtilConfigure.h"
      17                 :            : 
      18                 :            : // GCC compiler checking of format arguments
      19                 :            : // Note:  For class member functions, the first argument is the
      20                 :            : //        implicit 'this' pointer, so if the format string is the
      21                 :            : //        first explicit argument A should be 2, not 1.
      22                 :            : #ifdef __GNUC__
      23                 :            : # define CUBIT_STRING_PRINTF_FORMAT(A,B) __attribute__ ((format (printf, A, B)))
      24                 :            : #else
      25                 :            : # define CUBIT_STRING_PRINTF_FORMAT(A,B)
      26                 :            : #endif
      27                 :            : 
      28                 :            : #if defined(_MSC_VER)
      29                 :            : #pragma warning(push)
      30                 :            : #pragma warning(disable : 4251)  // hide warnings about template dll exports
      31                 :            : #endif
      32                 :            : 
      33                 :            : //! String class that represents a UTF-8 string
      34                 :            : class CUBIT_UTIL_EXPORT CubitString
      35                 :            : {
      36                 :            : public:
      37                 :            :   //! max size of a string
      38                 :            :   static const size_t npos;
      39                 :            : 
      40                 :            :   enum CaseSensitivity
      41                 :            :   {
      42                 :            :     CaseInsensitive,
      43                 :            :     CaseSensitive
      44                 :            :   };
      45                 :            : 
      46                 :            :   //! Default constructor
      47                 :            :   CubitString();
      48                 :            : 
      49                 :            :   //! Default destructor
      50                 :            :   ~CubitString();
      51                 :            : 
      52                 :            :   //! Copy Constructor
      53                 :            :   CubitString(const CubitString& s);
      54                 :            : 
      55                 :            :   //! Create a string from a char*
      56                 :            :   CubitString(const char* s);
      57                 :            : 
      58                 :            :   //- Create a string from a std::string
      59                 :            :   CubitString(const std::string& s);
      60                 :            : 
      61                 :            :   CubitString(int i,char c);
      62                 :            :   //- Create a string from a char
      63                 :            : 
      64                 :            :   //! Create a string from a integer or other stringstream recognized type
      65                 :            :   template <typename T>
      66                 :        421 :   static CubitString number(const T& i)
      67                 :            :   {
      68 [ +  - ][ +  - ]:        421 :     std::stringstream si;
      69         [ +  - ]:        421 :     si << i;
      70 [ +  - ][ +  - ]:        421 :     return CubitString(si.str().c_str());
         [ +  - ][ +  - ]
                 [ +  - ]
      71                 :            :   }
      72                 :            : 
      73                 :            :   //! Create a value from a CubitString.
      74                 :            :   template <typename T>
      75                 :            :   static T toNumber(const CubitString& str, bool *ok = NULL)
      76                 :            :   {
      77                 :            :     std::istringstream ss(str.c_str());
      78                 :            :     T result;
      79                 :            :     bool temp_ok = ss >> result;
      80                 :            :     if(ok)
      81                 :            :       (*ok) = temp_ok;
      82                 :            :     return result;
      83                 :            :   }
      84                 :            : 
      85                 :            :   //! Create a string from a double.
      86                 :            :   //! Use either fixed point or scientific notation, whichever is shorter.
      87                 :            :   //! s_length is the maximum string length: If s_length > 0, then
      88                 :            :   //! string will contain no spaces and be close to s_length long
      89                 :            :   //! without going over. Hence precision is variable.
      90                 :            :   static CubitString number(double f, unsigned int s_length = 0, unsigned int sig_digits = 0);
      91                 :            : 
      92                 :            :   //! set a formated string with arguments
      93                 :            :   static CubitString format(const char* fmt, ...) CUBIT_STRING_PRINTF_FORMAT(1,2);
      94                 :            : 
      95                 :            :   CubitString& operator=(const CubitString& s);
      96                 :            :   
      97                 :            :   CubitString& operator+=(const CubitString& s);
      98                 :            : 
      99                 :            :   CUBIT_UTIL_EXPORT friend CubitString operator+(const CubitString& s1, const CubitString& s2);
     100                 :            : 
     101                 :            :   CUBIT_UTIL_EXPORT friend bool operator<=(const CubitString&, const CubitString&);
     102                 :            :   CUBIT_UTIL_EXPORT friend bool operator>=(const CubitString&, const CubitString&);
     103                 :            :   CUBIT_UTIL_EXPORT friend bool operator<(const CubitString&, const CubitString&);
     104                 :            :   CUBIT_UTIL_EXPORT friend bool operator>(const CubitString&, const CubitString&);
     105                 :            :   
     106                 :            :   bool operator==(const CubitString &s) const;
     107                 :            :   bool operator!=(const CubitString &s) const;
     108                 :            :   //- Predicates: Compare equality/inequality with other CubitStrings or
     109                 :            :   //- with pointers to a list of characters.
     110                 :            : 
     111                 :            :   //! compare this string with another and return whether they are equal.
     112                 :            :   //! one can also specify case sensitivity
     113                 :            :   bool compare(const CubitString& s, CaseSensitivity cs = CaseSensitive);
     114                 :            :   // note case insensitive comparison with unicode is not yet supported
     115                 :            : 
     116                 :            :   //! get a character at a position
     117                 :            :   char get_at(size_t pos) const;
     118                 :            :   //! set a character at a position
     119                 :            :   void put_at(size_t pos, char c);
     120                 :            : 
     121                 :            :   //! get a substring starting at first and counting
     122                 :            :   CubitString substr(size_t first, size_t count = CubitString::npos) const;
     123                 :            : 
     124                 :            :   //! remove len number of characters starting at a position pos.
     125                 :            :   void erase(size_t pos, size_t len = npos);
     126                 :            : 
     127                 :            :   //! replace a portion of ths string with another string
     128                 :            :   void replace(size_t pos, size_t len, const CubitString& str);
     129                 :            : 
     130                 :            :   //! replace every occurance of string with another string
     131                 :            :   void replace(const CubitString& to_find, const CubitString& to_replace);
     132                 :            : 
     133                 :            :   //! convert to lower case (Note: this is not internationalized)
     134                 :            :   void to_lower();
     135                 :            :   static void to_lower(char *string);
     136                 :            :   //! convert to upper case (Note: this is not internationalized)
     137                 :            :   void to_upper();
     138                 :            :   static void to_upper(char *string);
     139                 :            : 
     140                 :            :   //! trim off whitespace from the beginning and end of the string
     141                 :            :   void trim();
     142                 :            : 
     143                 :            :   //! trim whitespace from the beginning and end of string, and
     144                 :            :   //! each sequence of internal white space is replaced with a single space
     145                 :            :   void simplify();
     146                 :            : 
     147                 :            :   //! split a string given a delimiter
     148                 :            :   void tokenize( char delimiter, std::vector<CubitString> &strings ) const;
     149                 :            : 
     150                 :            :   
     151                 :            :   //! find functions
     152                 :            :   size_t find(const CubitString& s, size_t pos = 0) const;
     153                 :            :   size_t find_first_of(const CubitString& s, size_t pos = 0) const;
     154                 :            :   size_t find_first(char c, size_t pos = 0) const;
     155                 :            :   size_t find_last (char c, size_t pos = CubitString::npos) const;
     156                 :            : 
     157                 :            : 
     158                 :            :   //! return whether the string ends with str
     159                 :            :   bool ends_with(const CubitString& str) const;
     160                 :            :   //! return whether the string starts with str
     161                 :            :   bool starts_with(const CubitString& str) const;
     162                 :            : 
     163                 :            :   //! returns whether the string is empty
     164                 :            :   bool is_empty() const;
     165                 :            : 
     166                 :            :   //! returns the length of the string
     167                 :            :   size_t length() const;
     168                 :            : 
     169                 :            :   //! returns a const char* for the string
     170                 :            :   const char *c_str() const;
     171                 :            :   
     172                 :            :   //! returns a std::string
     173                 :            :   const std::string& str() const;
     174                 :            : 
     175                 :            :   //! clear the string
     176                 :            :   void clear();
     177                 :            : 
     178                 :            :   //! resize the string.  If growing, it is filled with null characters.
     179                 :            :   void resize(size_t n);
     180                 :            :   //! resize the string.  If growing, it is filled with the given character.
     181                 :            :   void resize(size_t n, char c);
     182                 :            : 
     183                 :            :   // UTF-16/UTF-8 unicode conversions to support using Unicode aware Windows APIs.
     184                 :            :   // Note: wchar_t on non-Windows platforms is UTF-32
     185                 :            : #if defined(_WIN32)
     186                 :            :   static std::wstring toUtf16(const char* str);
     187                 :            :   static std::wstring toUtf16(const CubitString& str);
     188                 :            :   static CubitString toUtf8(const wchar_t* str);
     189                 :            : #endif
     190                 :            : 
     191                 :            : #if defined(_MSC_VER)
     192                 :            :   static std::wstring toNative(const char* str);
     193                 :            :   static std::wstring toNative(const CubitString& str);
     194                 :            : #else
     195                 :            :   static CubitString toNative(const char* str);
     196                 :            :   static CubitString toNative(const CubitString& str);
     197                 :            : #endif
     198                 :            : 
     199                 :            :   static std::wstring toWide(const CubitString& str);
     200                 :            :   static CubitString toNarrow(const std::wstring& str);
     201                 :            :   
     202                 :            : private:
     203                 :            :   std::string rep;
     204                 :            : };
     205                 :            : 
     206                 :            : #if defined(_MSC_VER)
     207                 :            : #pragma warning(pop)
     208                 :            : #endif
     209                 :            : 
     210                 :            : #endif
     211                 :            : 

Generated by: LCOV version 1.11