[Bf-blender-cvs] [a20cfb9eff0] master: BLI: use methods specialized for finding a single char in StringRef

Aras Pranckevicius noreply at git.blender.org
Fri Feb 4 10:42:49 CET 2022


Commit: a20cfb9eff0ec88fcb25007d08b2c0a380de9f0e
Author: Aras Pranckevicius
Date:   Fri Feb 4 10:38:05 2022 +0100
Branches: master
https://developer.blender.org/rBa20cfb9eff0ec88fcb25007d08b2c0a380de9f0e

BLI: use methods specialized for finding a single char in StringRef

Previously, these methods used the more generic substring-finding
algorithm, which is more complex and slower.

Using the more specialized methods results in a noticable speedup
in the obj importer (D13958).

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

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

M	source/blender/blenlib/BLI_string_ref.hh

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

diff --git a/source/blender/blenlib/BLI_string_ref.hh b/source/blender/blenlib/BLI_string_ref.hh
index e3dd8afd588..f72106aa961 100644
--- a/source/blender/blenlib/BLI_string_ref.hh
+++ b/source/blender/blenlib/BLI_string_ref.hh
@@ -358,7 +358,9 @@ constexpr int64_t StringRefBase::find_first_of(StringRef chars, int64_t pos) con
 
 constexpr int64_t StringRefBase::find_first_of(char c, int64_t pos) const
 {
-  return this->find_first_of(StringRef(&c, 1), pos);
+  BLI_assert(pos >= 0);
+  return index_or_npos_to_int64(
+      std::string_view(*this).find_first_of(c, static_cast<size_t>(pos)));
 }
 
 constexpr int64_t StringRefBase::find_last_of(StringRef chars, int64_t pos) const
@@ -370,7 +372,9 @@ constexpr int64_t StringRefBase::find_last_of(StringRef chars, int64_t pos) cons
 
 constexpr int64_t StringRefBase::find_last_of(char c, int64_t pos) const
 {
-  return this->find_last_of(StringRef(&c, 1), pos);
+  BLI_assert(pos >= 0);
+  return index_or_npos_to_int64(
+      std::string_view(*this).find_last_of(c, static_cast<size_t>(pos)));
 }
 
 constexpr int64_t StringRefBase::find_first_not_of(StringRef chars, int64_t pos) const
@@ -382,7 +386,9 @@ constexpr int64_t StringRefBase::find_first_not_of(StringRef chars, int64_t pos)
 
 constexpr int64_t StringRefBase::find_first_not_of(char c, int64_t pos) const
 {
-  return this->find_first_not_of(StringRef(&c, 1), pos);
+  BLI_assert(pos >= 0);
+  return index_or_npos_to_int64(
+      std::string_view(*this).find_first_not_of(c, static_cast<size_t>(pos)));
 }
 
 constexpr int64_t StringRefBase::find_last_not_of(StringRef chars, int64_t pos) const
@@ -394,7 +400,9 @@ constexpr int64_t StringRefBase::find_last_not_of(StringRef chars, int64_t pos)
 
 constexpr int64_t StringRefBase::find_last_not_of(char c, int64_t pos) const
 {
-  return this->find_last_not_of(StringRef(&c, 1), pos);
+  BLI_assert(pos >= 0);
+  return index_or_npos_to_int64(
+      std::string_view(*this).find_last_not_of(c, static_cast<size_t>(pos)));
 }
 
 constexpr StringRef StringRefBase::trim() const



More information about the Bf-blender-cvs mailing list