1
0
Fork 0
mirror of https://github.com/KingDuckZ/incredis synced 2025-05-10 09:13:30 +00:00

Accept lua scripts in a string_view rather than in a string.

This commit is contained in:
King_DuckZ 2017-06-21 21:09:46 +01:00
parent 0aee978661
commit 7b1931bca0
4 changed files with 10 additions and 9 deletions

View file

@ -50,7 +50,7 @@ namespace redis {
boost::string_view connection_error ( void ) const; boost::string_view connection_error ( void ) const;
Batch make_batch ( void ); Batch make_batch ( void );
Script make_script ( const std::string& parScript ); Script make_script ( const boost::string_view& parScript );
template <typename... Args> template <typename... Args>
Reply run ( const char* parCommand, Args&&... parArgs ); Reply run ( const char* parCommand, Args&&... parArgs );

View file

@ -38,13 +38,13 @@ namespace redis {
public: public:
explicit ScriptManager ( Command* parCommand ); explicit ScriptManager ( Command* parCommand );
boost::string_view submit_lua_script ( const std::string& parScript ); boost::string_view submit_lua_script ( const boost::string_view& parScript );
void update_command_ptr (Command* parNewPtr); void update_command_ptr (Command* parNewPtr);
private: private:
using Sha1Array = std::array<char, 40>; using Sha1Array = std::array<char, 40>;
boost::string_view add_lua_script_ifn ( const std::string& parScript ); boost::string_view add_lua_script_ifn ( const boost::string_view& parScript );
Command* m_command; Command* m_command;
#if defined(MAKE_SHA1_WITH_CRYPTOPP) #if defined(MAKE_SHA1_WITH_CRYPTOPP)
@ -54,7 +54,7 @@ namespace redis {
#endif #endif
}; };
inline boost::string_view ScriptManager::submit_lua_script (const std::string& parScript) { inline boost::string_view ScriptManager::submit_lua_script (const boost::string_view& parScript) {
return add_lua_script_ifn(parScript); return add_lua_script_ifn(parScript);
} }
} //namespace redis } //namespace redis

View file

@ -90,7 +90,7 @@ namespace redis {
return Batch(&m_local_data->async_connection, m_local_data->thread_context); return Batch(&m_local_data->async_connection, m_local_data->thread_context);
} }
Script Command::make_script (const std::string &parScript) { Script Command::make_script (const boost::string_view &parScript) {
auto sha1 = m_local_data->lua_scripts.submit_lua_script(parScript); auto sha1 = m_local_data->lua_scripts.submit_lua_script(parScript);
return Script(sha1, m_local_data->lua_scripts); return Script(sha1, m_local_data->lua_scripts);
} }

View file

@ -45,7 +45,7 @@ namespace redis {
} }
#if defined(MAKE_SHA1_WITH_CRYPTOPP) #if defined(MAKE_SHA1_WITH_CRYPTOPP)
boost::string_view ScriptManager::add_lua_script_ifn (const std::string& parScript) { boost::string_view ScriptManager::add_lua_script_ifn (const boost::string_view& parScript) {
assert(m_command->is_connected()); assert(m_command->is_connected());
if (parScript.empty()) if (parScript.empty())
@ -88,10 +88,11 @@ namespace redis {
return boost::string_view(it_inserted->data(), it_inserted->size()); return boost::string_view(it_inserted->data(), it_inserted->size());
} }
#else #else
boost::string_view ScriptManager::add_lua_script_ifn (const std::string& parScript) { boost::string_view ScriptManager::add_lua_script_ifn (const boost::string_view& parScript) {
assert(m_command->is_connected()); assert(m_command->is_connected());
auto it_found = m_known_scripts.find(parScript); std::string script_cpy = std::string(parScript);
auto it_found = m_known_scripts.find(script_cpy);
const bool was_present = (m_known_scripts.end() != it_found); const bool was_present = (m_known_scripts.end() != it_found);
if (was_present) { if (was_present) {
return boost::string_view(it_found->second.data(), it_found->second.size()); return boost::string_view(it_found->second.data(), it_found->second.size());
@ -103,7 +104,7 @@ namespace redis {
const auto sha1_str = get_string(reply); const auto sha1_str = get_string(reply);
Sha1Array sha1_array; Sha1Array sha1_array;
std::copy(sha1_str.begin(), sha1_str.end(), sha1_array.begin()); std::copy(sha1_str.begin(), sha1_str.end(), sha1_array.begin());
auto it_inserted = m_known_scripts.insert(it_found, std::make_pair(parScript, sha1_array)); auto it_inserted = m_known_scripts.insert(it_found, std::make_pair(std::move(script_cpy), sha1_array));
return boost::string_view(it_inserted->second.data(), it_inserted->second.size()); return boost::string_view(it_inserted->second.data(), it_inserted->second.size());
} }