@@ -15,6 +15,7 @@
#include <sstream>
#include <string.h>
#include <string>
+#include <string_view>
#include <sys/time.h>
#include <type_traits>
#include <utility>
@@ -38,7 +39,7 @@ namespace utils {
const char *basename(const char *path);
char *secure_getenv(const char *name);
-std::string dirname(const std::string &path);
+std::string dirname(std::string_view path);
template<typename T>
std::vector<typename T::key_type> map_keys(const T &map)
@@ -143,7 +144,7 @@ size_t strlcpy(char *dst, const char *src, size_t size);
#ifndef __DOXYGEN__
template<typename Container, typename UnaryOp>
-std::string join(const Container &items, const std::string &sep, UnaryOp op)
+std::string join(const Container &items, std::string_view sep, UnaryOp op)
{
std::ostringstream ss;
bool first = true;
@@ -162,7 +163,7 @@ std::string join(const Container &items, const std::string &sep, UnaryOp op)
}
template<typename Container>
-std::string join(const Container &items, const std::string &sep)
+std::string join(const Container &items, std::string_view sep)
{
std::ostringstream ss;
bool first = true;
@@ -181,7 +182,7 @@ std::string join(const Container &items, const std::string &sep)
}
#else
template<typename Container, typename UnaryOp>
-std::string join(const Container &items, const std::string &sep, UnaryOp op = nullptr);
+std::string join(const Container &items, std::string_view sep, UnaryOp op = nullptr);
#endif
namespace details {
@@ -189,7 +190,7 @@ namespace details {
class StringSplitter
{
public:
- StringSplitter(const std::string &str, const std::string &delim);
+ StringSplitter(std::string_view str, std::string_view delim);
class iterator
{
@@ -238,9 +239,9 @@ private:
} /* namespace details */
-details::StringSplitter split(const std::string &str, const std::string &delim);
+details::StringSplitter split(std::string_view str, std::string_view delim);
-std::string toAscii(const std::string &str);
+std::string toAscii(std::string_view str);
std::string libcameraBuildPath();
std::string libcameraSourcePath();
@@ -80,7 +80,7 @@ char *secure_getenv(const char *name)
*
* \return A string of the directory component of the path
*/
-std::string dirname(const std::string &path)
+std::string dirname(std::string_view path)
{
if (path.empty())
return ".";
@@ -116,7 +116,7 @@ std::string dirname(const std::string &path)
pos--;
}
- return path.substr(0, pos + 1);
+ return std::string(path.substr(0, pos + 1));
}
/**
@@ -247,7 +247,7 @@ size_t strlcpy(char *dst, const char *src, size_t size)
return strlen(src);
}
-details::StringSplitter::StringSplitter(const std::string &str, const std::string &delim)
+details::StringSplitter::StringSplitter(std::string_view str, std::string_view delim)
: str_(str), delim_(delim)
{
}
@@ -278,7 +278,7 @@ std::string details::StringSplitter::iterator::operator*() const
/**
* \fn template<typename Container, typename UnaryOp> \
- * std::string utils::join(const Container &items, const std::string &sep, UnaryOp op)
+ * std::string utils::join(const Container &items, std::string_view sep, UnaryOp op)
* \brief Join elements of a container in a string with a separator
* \param[in] items The container
* \param[in] sep The separator to add between elements
@@ -293,7 +293,7 @@ std::string details::StringSplitter::iterator::operator*() const
*/
/**
- * \fn split(const std::string &str, const std::string &delim)
+ * \fn split(std::string_view str, std::string_view delim)
* \brief Split a string based on a delimiter
* \param[in] str The string to split
* \param[in] delim The delimiter string
@@ -305,7 +305,7 @@ std::string details::StringSplitter::iterator::operator*() const
* \return An object that can be used in a range-based for loop to iterate over
* the substrings
*/
-details::StringSplitter split(const std::string &str, const std::string &delim)
+details::StringSplitter split(std::string_view str, std::string_view delim)
{
/** \todo Try to avoid copies of str and delim */
return details::StringSplitter(str, delim);
@@ -319,7 +319,7 @@ details::StringSplitter split(const std::string &str, const std::string &delim)
*
* \return A string equal to \a str stripped out of all non-ASCII characters
*/
-std::string toAscii(const std::string &str)
+std::string toAscii(std::string_view str)
{
std::string ret;
for (const char &c : str)
Replace usage of const std::string references passed to class member functions with std::string_view. This allows using static C string literals in the callers without the overhead of constructing a std::string instance. As std::string can't be implicitly constructed from std::string_view, an explicit construction is added at the end of dirname(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- include/libcamera/base/utils.h | 15 ++++++++------- src/libcamera/base/utils.cpp | 14 +++++++------- 2 files changed, 15 insertions(+), 14 deletions(-)