Ejemplo n.º 1
0
LLBC_String LLBC_BaseName(const LLBC_String &path, bool incExtension)
{
    if (UNLIKELY(path.empty()))
    {
        return LLBC_String();
    }

    LLBC_String baseName;
#if LLBC_TARGET_PLATFORM_NON_WIN32
    baseName = ::basename(const_cast<char *>(path.c_str()));
#else
    LLBC_String::size_type slashPos = path.rfind(LLBC_SLASH_A);
    LLBC_String::size_type backlashPos = path.rfind(LLBC_BACKLASH_A);

    if (slashPos == LLBC_String::npos)
    {
        if (backlashPos == LLBC_String::npos)
        {
            baseName = path;
        }
        else
        {
            baseName = path.substr(backlashPos + 1);
        }
    }
    else
    {
        if (backlashPos == LLBC_String::npos)
        {
            baseName = path.substr(slashPos + 1);
        }
        else
        {
            baseName = path.substr(MAX(slashPos, backlashPos) + 1);
        }
    }
#endif

    if (!incExtension)
    {
        LLBC_String::size_type dotPos = baseName.rfind('.');
        if (dotPos != LLBC_String::npos && dotPos != 0)
        {
            baseName.erase(dotPos);
        }
    }

    return baseName;
}
Ejemplo n.º 2
0
LLBC_String LLBC_DirName(const LLBC_String &path)
{
    if (UNLIKELY(path.empty()))
    {
        return LLBC_String();
    }

#if LLBC_TARGET_PLATFORM_NON_WIN32
    char *buf = reinterpret_cast<char *>(::malloc(path.size() + 1));
    ::memcpy(buf,  path.data(), path.size());
    buf[path.size()] = '\0';

    ::dirname(buf);

    LLBC_String dirName = buf;
    ::free(buf);

    return dirName;
#else
    if (path[path.length() - 1] == ':')
    {
        return path;
    }

    LLBC_String::size_type slashPos = path.rfind(LLBC_SLASH_A);
    LLBC_String::size_type backlashPos = path.rfind(LLBC_BACKLASH_A);

    if (slashPos == LLBC_String::npos)
    {
        if (backlashPos == LLBC_String::npos)
        {
            return LLBC_String();
        }

        return path.substr(0, backlashPos);
    }
    else
    {
        if (backlashPos == LLBC_String::npos)
        {
            return path.substr(0, slashPos);
        }
    }

    return path.substr(0, MAX(slashPos, backlashPos));
#endif
}
Ejemplo n.º 3
0
LLBC_String LLBC_ExtensionName(const LLBC_String &path)
{
    LLBC_String basename = LLBC_BaseName(path);
    if (UNLIKELY(basename.empty()))
    {
        return LLBC_String();
    }

    LLBC_String::size_type pos = basename.rfind(".");
    if (pos == LLBC_String::npos)
    {
        return LLBC_String();
    }

    return basename.substr(pos + 1);
}
Ejemplo n.º 4
0
int LLBC_LogTokenChain::Build(const LLBC_String &pattern)
{
    if (_head)
    {
        LLBC_SetLastError(LLBC_ERROR_REENTRY);
        return LLBC_RTN_FAILED;
    }

    char ch = '\0';
    const char *curPattern = NULL;
    LLBC_String::size_type patternLength = 0;
    int state = LLBC_INTERNAL_NS __g_literal_state;

    LLBC_ILogToken *token = NULL;
    LLBC_LogFormattingInfo *formatter = NULL;

    LLBC_String buf;
    if (pattern.empty())
    {
        curPattern = LLBC_INTERNAL_NS __g_default_pattern;
        patternLength = LLBC_StrLenA(LLBC_INTERNAL_NS __g_default_pattern);
    }
    else
    {
        curPattern = pattern.data();
        patternLength = pattern.size();
    }

    for (size_t i = 0; i < patternLength;)
    {
        ch = curPattern[i ++];
        switch(state)
        {
        case LLBC_INTERNAL_NS __g_literal_state:
            if (i == patternLength)
            {
                buf.append(1, ch);
                break;
            }

            if (ch == LLBC_LogTokenType::EscapeToken)
            {
                if (curPattern[i] == LLBC_LogTokenType::EscapeToken)
                {
                    buf.append(1, ch);
                    i ++;
                }
                else
                {
                    if (!buf.empty())
                    {
                        token = LLBC_LogTokenBuilderSingleton->BuildLogToken(LLBC_LogTokenType::StrToken);
                        token->Initialize(formatter, buf);
                        this->AppendToken(token);

                        buf.clear();
                        formatter = NULL;
                    }

                    buf.append(1, ch);
                    LLBC_XDelete(formatter);
                    state = LLBC_INTERNAL_NS __g_converter_state;
                }
            }
            else
            {
                buf.append(1, ch);
            }

            break;

        case LLBC_INTERNAL_NS __g_converter_state:
            buf.append(1, ch);
            
            if ((ch >= 0x30 && ch <= 0x39) || ch == '-')
            {
                state = LLBC_INTERNAL_NS __g_number_state;
                break;
            }

            buf.erase(buf.rfind(LLBC_LogTokenType::EscapeToken));
            token = LLBC_LogTokenBuilderSingleton->BuildLogToken(ch);
            if (!formatter)
            {
                formatter = new LLBC_LogFormattingInfo;
            }

            token->Initialize(formatter, "");
            this->AppendToken(token);

            formatter = NULL;
            state = LLBC_INTERNAL_NS __g_literal_state;

            break;

        case LLBC_INTERNAL_NS __g_number_state:
            if ((ch < 0x30 || ch > 0x39) && ch != '-')
            {
                int minLength = LLBC_Str2Int32(&buf[buf.rfind(LLBC_LogTokenType::EscapeToken) + 1]);
                if (!formatter)
                {
                    formatter = new LLBC_LogFormattingInfo(minLength < 0 ? true : false, ::abs(minLength), INT_MAX);
                }
                else
                {
                    formatter->SetLeftAligh(minLength < 0 ? true : false);
                    formatter->SetMinLen(minLength);
                    formatter->SetMaxLen(INT_MAX);
                }

                i --;
                state = LLBC_INTERNAL_NS __g_converter_state;

                break;
            }

            buf.append(1, ch);
            break;

        default:
            LLBC_XDelete(formatter);
            this->Cleanup();

            LLBC_SetLastError(LLBC_ERROR_FORMAT);
            return LLBC_RTN_FAILED;

            break;
        }
    }

    if (!buf.empty())
    {
        token = LLBC_LogTokenBuilderSingleton->BuildLogToken(LLBC_LogTokenType::StrToken);
        token->Initialize(NULL, buf);
        this->AppendToken(token);
    }

    return LLBC_RTN_OK;
}