]> git.mxchange.org Git - simgear.git/blobdiff - simgear/misc/strutils.cxx
Add optional attribute condition to "copyProperties".
[simgear.git] / simgear / misc / strutils.cxx
index 8940ea6bf2244343c1e31204df46935bdc0f14eb..a81adc5c22f5331cc7a0bfc9752ab9eeb0b3f275 100644 (file)
 // $Id$
 
 #include <ctype.h>
+#include <cstring>
+
 #include "strutils.hxx"
 
+using std::string;
+using std::vector;
+
 namespace simgear {
     namespace strutils {
 
@@ -82,7 +87,7 @@ namespace simgear {
                return split_whitespace( str, maxsplit );
 
            vector<string> result;
-           int n = strlen( sep );
+           int n = std::strlen( sep );
            if (n == 0)
            {
                // Error: empty separator string
@@ -96,7 +101,7 @@ namespace simgear {
 
            while (i+n <= len)
            {
-               if (s[i] == sep[0] && (n == 1 || memcmp(s+i, sep, n) == 0))
+               if (s[i] == sep[0] && (n == 1 || std::memcmp(s+i, sep, n) == 0))
                {
                    result.push_back( str.substr(j,i-j) );
                    i = j = i + n;
@@ -126,10 +131,9 @@ namespace simgear {
        static string
        do_strip( const string& s, int striptype )
        {
-           //     if (s.empty())
-           //      return s;
-
            string::size_type len = s.length();
+           if( len == 0 ) // empty string is trivial
+               return s;
            string::size_type i = 0;
            if (striptype != RIGHTSTRIP)
            {
@@ -178,5 +182,36 @@ namespace simgear {
            return do_strip( s, BOTHSTRIP );
        }
 
+       string 
+       rpad( const string & s, string::size_type length, char c )
+       {
+           string::size_type l = s.length();
+           if( l >= length ) return s;
+           string reply = s;
+           return reply.append( length-l, c );
+       }
+
+       string 
+       lpad( const string & s, size_t length, char c )
+       {
+           string::size_type l = s.length();
+           if( l >= length ) return s;
+           string reply = s;
+           return reply.insert( 0, length-l, c );
+       }
+
+       bool
+       starts_with( const string & s, const string & substr )
+       {       
+               return s.find( substr ) == 0;
+       }
+
+       bool
+       ends_with( const string & s, const string & substr )
+       {       
+               size_t n = s.rfind( substr );
+               return (n != string::npos) && (n == s.length() - substr.length());
+       }
+
     } // end namespace strutils
 } // end namespace simgear