[Bf-blender-cvs] [06c682423a4] blender-v2.93-release: BLI_string: add a utility to replace strings using a table
Campbell Barton
noreply at git.blender.org
Wed Apr 21 09:43:27 CEST 2021
Commit: 06c682423a4374536c081a2b5c77446b5aa04d1e
Author: Campbell Barton
Date: Wed Apr 21 17:34:18 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rB06c682423a4374536c081a2b5c77446b5aa04d1e
BLI_string: add a utility to replace strings using a table
Useful to simplify versioning code when identifiers need updating
in multiple places.
===================================================================
M source/blender/blenlib/BLI_string.h
M source/blender/blenlib/intern/string.c
===================================================================
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 096e7818013..5a80680c350 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -68,6 +68,11 @@ char *BLI_str_replaceN(const char *__restrict str,
void BLI_str_replace_char(char *string, char src, char dst) ATTR_NONNULL();
+bool BLI_str_replace_table_exact(char *string,
+ const size_t string_len,
+ const char *replace_table[][2],
+ int replace_table_len);
+
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format, ...)
ATTR_NONNULL(1, 3) ATTR_PRINTF_FORMAT(3, 4);
size_t BLI_snprintf_rlen(char *__restrict dst, size_t maxncpy, const char *__restrict format, ...)
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index ccc11af9f2b..3d40c6ef146 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -539,6 +539,29 @@ void BLI_str_replace_char(char *str, char src, char dst)
}
}
+/**
+ * Simple exact-match string replacement.
+ *
+ * \param replace_table: Array of source, destination pairs.
+ *
+ * \note Larger tables should use a hash table.
+ */
+bool BLI_str_replace_table_exact(char *string,
+ const size_t string_len,
+ const char *replace_table[][2],
+ int replace_table_len)
+{
+ for (int i = 0; i < replace_table_len; i++) {
+ if (STREQ(string, replace_table[i][0])) {
+ BLI_strncpy(string, replace_table[i][1], string_len);
+ return true;
+ }
+ }
+ return false;
+}
+
+/** \} */
+
/**
* Compare two strings without regard to case.
*
More information about the Bf-blender-cvs
mailing list