mirror of
git://sourceware.org/git/libabigail.git
synced 2025-01-23 01:36:21 +00:00
Add POSIX regex wrapper functions.
libabigail code uses the POSIX regex library consistently: - compile std::string to regex, with the flag REG_EXTENDED - store regex using a shared pointer wrapper - check match of regex against std::string All the C string / std::string logic and so on is repeated at every call site. This patch introduces wrapper functions to take care of this logic. There are no behavioural changes. * include/abg-regex.h (compile): Declare new function. (match): Declare new function. * src/abg-regex.cc (compile): Add new function wrapping regcomp. (match): Add new function wrapping regexec. Reviewed-by: Matthias Maennich <maennich@google.com> Signed-off-by: Giuliano Procida <gprocida@google.com>
This commit is contained in:
parent
db8e3a0584
commit
c72f52c381
@ -71,6 +71,12 @@ operator<<(std::ostream& os, const escape& esc);
|
||||
std::string
|
||||
generate_from_strings(const std::vector<std::string>& strs);
|
||||
|
||||
regex_t_sptr
|
||||
compile(const std::string& str);
|
||||
|
||||
bool
|
||||
match(const regex_t_sptr& r, const std::string& str);
|
||||
|
||||
}// end namespace regex
|
||||
|
||||
namespace sptr_utils
|
||||
|
@ -23,12 +23,22 @@
|
||||
/// Some specialization for shared pointer utility templates.
|
||||
///
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <ostream>
|
||||
|
||||
#include "abg-internal.h"
|
||||
|
||||
// <headers defining libabigail's API go under here>
|
||||
ABG_BEGIN_EXPORT_DECLARATIONS
|
||||
|
||||
#include "abg-regex.h"
|
||||
#include "abg-sptr-utils.h"
|
||||
|
||||
ABG_END_EXPORT_DECLARATIONS
|
||||
// </headers defining libabigail's API>
|
||||
|
||||
namespace abigail
|
||||
{
|
||||
|
||||
@ -104,6 +114,36 @@ generate_from_strings(const std::vector<std::string>& strs)
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/// Compile a regex from a string.
|
||||
///
|
||||
/// The result is held in a shared pointer. This will be null if regex
|
||||
/// compilation fails.
|
||||
///
|
||||
/// @param str the string representation of the regex.
|
||||
///
|
||||
/// @return shared pointer holder of a compiled regex object.
|
||||
regex_t_sptr
|
||||
compile(const std::string& str)
|
||||
{
|
||||
regex_t_sptr r = sptr_utils::build_sptr(new regex_t);
|
||||
if (regcomp(r.get(), str.c_str(), REG_EXTENDED))
|
||||
r.reset();
|
||||
return r;
|
||||
}
|
||||
|
||||
/// See if a string matches a regex.
|
||||
///
|
||||
/// @param r a shared pointer holder of a compiled regex object.
|
||||
///
|
||||
/// @param str a string.
|
||||
///
|
||||
/// @return whether there was a match.
|
||||
bool
|
||||
match(const regex_t_sptr& r, const std::string& str)
|
||||
{
|
||||
return !regexec(r.get(), str.c_str(), 0, NULL, 0);
|
||||
}
|
||||
|
||||
}//end namespace regex
|
||||
|
||||
}//end namespace abigail
|
||||
|
Loading…
Reference in New Issue
Block a user