Avoid copying StringRef

In theory the copy is cheap (couple of pointers change), but tests
are usually compiled in Debug mode/with minimal optimizations, which
means that most users will still have to pay the cost for those
function calls.
This commit is contained in:
Martin Hořeňovský 2018-07-23 13:49:29 +02:00
parent 83bfae1a50
commit 52cbb507ab
4 changed files with 8 additions and 8 deletions

View File

@ -52,7 +52,7 @@ namespace Catch {
} }
AssertionHandler::AssertionHandler AssertionHandler::AssertionHandler
( StringRef macroName, ( StringRef const& macroName,
SourceLineInfo const& lineInfo, SourceLineInfo const& lineInfo,
StringRef capturedExpression, StringRef capturedExpression,
ResultDisposition::Flags resultDisposition ) ResultDisposition::Flags resultDisposition )
@ -109,7 +109,7 @@ namespace Catch {
// This is the overload that takes a string and infers the Equals matcher from it // This is the overload that takes a string and infers the Equals matcher from it
// The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp
void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ) { void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString ) {
handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString ); handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
} }

View File

@ -49,7 +49,7 @@ namespace Catch {
public: public:
AssertionHandler AssertionHandler
( StringRef macroName, ( StringRef const& macroName,
SourceLineInfo const& lineInfo, SourceLineInfo const& lineInfo,
StringRef capturedExpression, StringRef capturedExpression,
ResultDisposition::Flags resultDisposition ); ResultDisposition::Flags resultDisposition );
@ -81,7 +81,7 @@ namespace Catch {
auto allowThrows() const -> bool; auto allowThrows() const -> bool;
}; };
void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ); void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString );
} // namespace Catch } // namespace Catch

View File

@ -15,7 +15,7 @@ namespace Catch {
// This is the general overload that takes a any string matcher // This is the general overload that takes a any string matcher
// There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers
// the Equals matcher (so the header does not mention matchers) // the Equals matcher (so the header does not mention matchers)
void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ) { void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) {
std::string exceptionMessage = Catch::translateActiveException(); std::string exceptionMessage = Catch::translateActiveException();
MatchExpr<std::string, StringMatcher const&> expr( exceptionMessage, matcher, matcherString ); MatchExpr<std::string, StringMatcher const&> expr( exceptionMessage, matcher, matcherString );
handler.handleExpr( expr ); handler.handleExpr( expr );

View File

@ -24,7 +24,7 @@ namespace Catch {
MatcherT m_matcher; MatcherT m_matcher;
StringRef m_matcherString; StringRef m_matcherString;
public: public:
MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString )
: ITransientExpression{ true, matcher.match( arg ) }, : ITransientExpression{ true, matcher.match( arg ) },
m_arg( arg ), m_arg( arg ),
m_matcher( matcher ), m_matcher( matcher ),
@ -43,10 +43,10 @@ namespace Catch {
using StringMatcher = Matchers::Impl::MatcherBase<std::string>; using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ); void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString );
template<typename ArgT, typename MatcherT> template<typename ArgT, typename MatcherT>
auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) -> MatchExpr<ArgT, MatcherT> { auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString ) -> MatchExpr<ArgT, MatcherT> {
return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString ); return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
} }