Browse Source

Added some missing StringView functions.

Branimir Karadžić 7 years ago
parent
commit
716c1b873a
2 changed files with 59 additions and 0 deletions
  1. 9 0
      include/bx/string.h
  2. 50 0
      src/string.cpp

+ 9 - 0
include/bx/string.h

@@ -224,12 +224,21 @@ namespace bx
 	/// Find end of line. Retuns pointer to new line terminator.
 	/// Find end of line. Retuns pointer to new line terminator.
 	const char* streol(const char* _str);
 	const char* streol(const char* _str);
 
 
+	/// Find end of line. Retuns pointer to new line terminator.
+	const StringView strFindEol(const StringView& _str)
+
 	/// Skip whitespace.
 	/// Skip whitespace.
 	const char* strws(const char* _str);
 	const char* strws(const char* _str);
 
 
+	/// Skip whitespace.
+	const StringView strSkipSpace(const StringView& _str);
+
 	/// Skip non-whitespace.
 	/// Skip non-whitespace.
 	const char* strnws(const char* _str);
 	const char* strnws(const char* _str);
 
 
+	/// Skip non-whitespace.
+	const StringView strSkipNonSpace(const StringView& _str);
+
 	/// Returns pointer to first character after word.
 	/// Returns pointer to first character after word.
 	const char* strSkipWord(const char* _str, int32_t _max = INT32_MAX);
 	const char* strSkipWord(const char* _str, int32_t _max = INT32_MAX);
 
 

+ 50 - 0
src/string.cpp

@@ -534,18 +534,68 @@ namespace bx
 		return _str;
 		return _str;
 	}
 	}
 
 
+	const StringView strFindEol(const StringView& _str)
+	{
+		StringView str(_str);
+
+		for (; str.getPtr() != _str.getTerm()
+			 ; str = StringView(str.getPtr()+1024, min(str.getPtr()+1024, _str.getTerm() ) )
+			)
+		{
+			const char* eol = strFind(str, "\r\n");
+			if (NULL != eol)
+			{
+				return StringView(eol, _str.getTerm() );
+			}
+
+			eol = strFind(str, "\n");
+			if (NULL != eol)
+			{
+				return StringView(eol, _str.getTerm() );
+			}
+		}
+
+		return StringView(_str.getTerm(), _str.getTerm() );
+	}
+
 	const char* strws(const char* _str)
 	const char* strws(const char* _str)
 	{
 	{
 		for (; isSpace(*_str); ++_str) {};
 		for (; isSpace(*_str); ++_str) {};
 		return _str;
 		return _str;
 	}
 	}
 
 
+	const StringView strSkipSpace(const StringView& _str)
+	{
+		for (const char* ptr = _str.getPtr(), *term = _str.getTerm(); ptr != term; ++ptr)
+		{
+			if (!isSpace(*ptr) )
+			{
+				return StringView(ptr, term);
+			}
+		}
+
+		return StringView(_str.getTerm(), _str.getTerm() );
+	}
+
 	const char* strnws(const char* _str)
 	const char* strnws(const char* _str)
 	{
 	{
 		for (; !isSpace(*_str); ++_str) {};
 		for (; !isSpace(*_str); ++_str) {};
 		return _str;
 		return _str;
 	}
 	}
 
 
+	const StringView strSkipNonSpace(const StringView& _str)
+	{
+		for (const char* ptr = _str.getPtr(), *term = _str.getTerm(); ptr != term; ++ptr)
+		{
+			if (isSpace(*ptr) )
+			{
+				return StringView(ptr, term);
+			}
+		}
+
+		return StringView(_str.getTerm(), _str.getTerm() );
+	}
+
 	const char* strSkipWord(const char* _str, int32_t _max)
 	const char* strSkipWord(const char* _str, int32_t _max)
 	{
 	{
 		for (char ch = *_str++; 0 < _max && (isAlphaNum(ch) || '_' == ch); ch = *_str++, --_max) {};
 		for (char ch = *_str++; 0 < _max && (isAlphaNum(ch) || '_' == ch); ch = *_str++, --_max) {};