From ba403e4a7cd2ff5a4d9e4c669ce71c6260fe21a3 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sat, 16 Mar 2024 11:25:39 +0800 Subject: [PATCH] [guid.hpp] GUID::from_string and is_valid_string takes a const char* boost::uuids::string_generator has operator()(const char*). thus we can avoid allocating std::string, with a consistent 4% speedup --- libgnucash/engine/guid.cpp | 6 ++++-- libgnucash/engine/guid.hpp | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libgnucash/engine/guid.cpp b/libgnucash/engine/guid.cpp index 55aade3cfd..48894640e2 100644 --- a/libgnucash/engine/guid.cpp +++ b/libgnucash/engine/guid.cpp @@ -331,8 +331,10 @@ GUID::to_string () const noexcept } GUID -GUID::from_string (std::string const & str) +GUID::from_string (const char* str) { + if (!str) + throw guid_syntax_exception {}; try { static boost::uuids::string_generator strgen; @@ -345,7 +347,7 @@ GUID::from_string (std::string const & str) } bool -GUID::is_valid_guid (std::string const & str) +GUID::is_valid_guid (const char* str) { try { diff --git a/libgnucash/engine/guid.hpp b/libgnucash/engine/guid.hpp index 8b72e34348..7a883ecd9b 100644 --- a/libgnucash/engine/guid.hpp +++ b/libgnucash/engine/guid.hpp @@ -24,6 +24,7 @@ #include #include +#include #include "guid.h" @@ -48,8 +49,10 @@ struct GUID operator GncGUID () const noexcept; static GUID create_random () noexcept; static GUID const & null_guid () noexcept; - static GUID from_string (std::string const &); - static bool is_valid_guid (std::string const &); + static GUID from_string (const char*); + static GUID from_string (std::string const& s) { return from_string (s.c_str()); }; + static bool is_valid_guid (const char*); + static bool is_valid_guid (std::string const &s) { return is_valid_guid (s.c_str()); }; std::string to_string () const noexcept; auto begin () const noexcept -> decltype (implementation.begin ()); auto end () const noexcept -> decltype (implementation.end ());