[Bf-blender-cvs] [58ab616d4c6] cycles-x: Cycles X: Switch startswith/endswith to string_view

Sergey Sharybin noreply at git.blender.org
Tue Sep 14 17:04:54 CEST 2021


Commit: 58ab616d4c6e5d65d9415bb54845eddb0acf54e7
Author: Sergey Sharybin
Date:   Tue Sep 14 14:56:48 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB58ab616d4c6e5d65d9415bb54845eddb0acf54e7

Cycles X: Switch startswith/endswith to string_view

Currently no functional changes. Making this internal API flexible to
be used for any string-like objects.

The implementation is a bit lower-level than one would expect from the
C++'s string_view. This is because the string_view implementation is
coming from OIIO./

Differential Revision: https://developer.blender.org/D12483

===================================================================

M	intern/cycles/util/util_string.cpp
M	intern/cycles/util/util_string.h

===================================================================

diff --git a/intern/cycles/util/util_string.cpp b/intern/cycles/util/util_string.cpp
index de0833d4d2a..9c0b2ca50bb 100644
--- a/intern/cycles/util/util_string.cpp
+++ b/intern/cycles/util/util_string.cpp
@@ -110,24 +110,26 @@ void string_split(vector<string> &tokens,
   }
 }
 
-bool string_startswith(const string &s, const char *start)
+bool string_startswith(const string_view s, const string_view start)
 {
-  size_t len = strlen(start);
+  const size_t len = start.size();
 
-  if (len > s.size())
-    return 0;
-  else
-    return strncmp(s.c_str(), start, len) == 0;
+  if (len > s.size()) {
+    return false;
+  }
+
+  return strncmp(s.c_str(), start.data(), len) == 0;
 }
 
-bool string_endswith(const string &s, const string &end)
+bool string_endswith(const string_view s, const string_view end)
 {
-  size_t len = end.length();
+  const size_t len = end.size();
 
-  if (len > s.size())
-    return 0;
-  else
-    return s.compare(s.length() - len, len, end) == 0;
+  if (len > s.size()) {
+    return false;
+  }
+
+  return strncmp(s.c_str() + s.size() - len, end.data(), len) == 0;
 }
 
 string string_strip(const string &s)
diff --git a/intern/cycles/util/util_string.h b/intern/cycles/util/util_string.h
index 79a0b4f38e6..55462cfd8b8 100644
--- a/intern/cycles/util/util_string.h
+++ b/intern/cycles/util/util_string.h
@@ -52,8 +52,8 @@ void string_split(vector<string> &tokens,
                   const string &separators = "\t ",
                   bool skip_empty_tokens = true);
 void string_replace(string &haystack, const string &needle, const string &other);
-bool string_startswith(const string &s, const char *start);
-bool string_endswith(const string &s, const string &end);
+bool string_startswith(string_view s, string_view start);
+bool string_endswith(string_view s, string_view end);
 string string_strip(const string &s);
 string string_remove_trademark(const string &s);
 string string_from_bool(const bool var);



More information about the Bf-blender-cvs mailing list