From b8b4335dba57e1c6159b77d5cb7bbe91318664b4 Mon Sep 17 00:00:00 2001 From: Benoit Germain Date: Tue, 19 Nov 2024 08:39:38 +0100 Subject: Simplified lane base library string parsing --- src/state.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/state.cpp b/src/state.cpp index c8f1ef8..6c49694 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -253,23 +253,17 @@ namespace state { }; while (!_libs.empty()) { // remove prefix not part of a name - auto _nameStart{ std::find_if(std::cbegin(_libs), std::cend(_libs), isLibNameChar) }; - if (_nameStart == _libs.end()) { - break; - } - auto const _prefixLen{ std::distance(_libs.begin(), _nameStart) }; - - auto const _nameEnd{ std::find_if(_nameStart, std::cend(_libs), [&isLibNameChar](char const _c) { return !isLibNameChar(_c); }) }; - // advance to the end of the character sequence composing the name - auto const _nameLen{ std::distance(_nameStart, _nameEnd) }; - if (_nameLen == 0) { + _libs = std::string_view{ std::find_if(std::cbegin(_libs), std::cend(_libs), isLibNameChar), _libs.end() }; + // extract a single name + auto const _libNameEnd{ std::find_if(std::cbegin(_libs), std::cend(_libs), [&isLibNameChar](char const _c) { return !isLibNameChar(_c); }) }; + std::string_view const _libName{ _libs.begin(), _libNameEnd }; + if (_libName.empty()) { break; } // open library - std::string_view const _libName{ _libs.substr(static_cast(_prefixLen), static_cast(_nameLen)) }; Open1Lib(_L, _libName); - // advance to next item (can't do this earlier as it invalidates iterators) - _libs.remove_prefix(static_cast(_prefixLen + _nameLen)); + // advance to next item + _libs = std::string_view{ _libNameEnd, _libs.end() }; } lua_gc(_L, LUA_GCRESTART, 0); -- cgit v1.2.3-55-g6feb