static inline bool AsteriskMatch()

in nodemanager/utils/String.h [77:110]


                static inline bool AsteriskMatch(const std::string & str, const std::string & patternStr)
                {
                    const char ASTERISK = '*';
                    if (patternStr.find(ASTERISK) == std::string::npos)
                    {
                        return str == patternStr;
                    }

                    bool first = true;
                    size_t pos = 0;
                    auto patterns = Split(patternStr, ASTERISK);
                    auto last = patterns.back();
                    patterns.pop_back();
                    for (const auto & p : patterns)
                    {
                        pos = str.find(p, pos);
                        if (pos == std::string::npos || (first && pos != 0))
                        {
                            return false;
                        }

                        pos += p.size();
                        first = false;
                    }
                    
                    if (patternStr[patternStr.size() - 1] == ASTERISK)
                    {
                        pos = str.find(last, pos);
                        return first ? pos == 0 : pos != std::string::npos;
                    }

                    auto lastPos = str.rfind(last);
                    return lastPos != std::string::npos && lastPos >= pos && lastPos + last.size() == str.size();
                }