亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? path.hpp

?? 用STL的方式封裝了WindowsAPI、COM調用、ACE、ATL、MFC、WTL等多種組件
?? HPP
?? 第 1 頁 / 共 4 頁
字號:
            *dest++ = *p1++;
        }
        else
#endif /* _WIN32 */
        {
            *dest++ = traits_type::path_name_separator();
            ++p1;
        }
    }

    // 1. Parse the path into an uncanonicalised sequence of directory parts
    {
        size_type   i   =   0;

        for(; '\0' != *p1; ++i)
        {
            p2 = next_slash_or_end(p1);

            parts[i].len    =   static_cast<size_type>(p2 - p1);
            parts[i].p      =   p1;
            parts[i].type   =   part::normal;
            switch(parts[i].len)
            {
                case    1:
                    if('.' == p1[0])
                    {
                        parts[i].type   =   part::dot;
                    }
                    break;
                case    2:
                    if('.' == p1[0])
                    {
                        if('.' == p1[1])
                        {
                            parts[i].type   =   part::dotdot;
                        }
                        else if(traits_type::path_name_separator() == p1[1])
                        {
                            parts[i].type   =   part::dot;
                        }
#ifdef _WIN32
                        else if(path_name_separator_alt() == p1[1])
                        {
                            parts[i].type   =   part::dot;
                        }
#endif /* _WIN32 */
                    }
                    break;
                case    3:
                    if( '.' == p1[0] &&
                        '.' == p1[1])
                    {
                        if(traits_type::path_name_separator() == p1[2])
                        {
                            parts[i].type   =   part::dotdot;
                        }
#ifdef _WIN32
                        else if(path_name_separator_alt() == p1[2])
                        {
                            parts[i].type   =   part::dotdot;
                        }
#endif /* _WIN32 */
                    }
                    break;
                default:
                    break;
            }

            p1 = p2;
        }

        parts.resize(i);
    }

    // 2. Process the parts into a canonicalised sequence
    {
        size_type   i   =   0;

        for(i = 0; i < parts.size(); ++i)
        {
            switch(parts[i].type)
            {
                case    part::dot:
                    parts[i].len = 0;
                    break;
                case    part::dotdot:
                    // Now need to track back and find a prior normal element
                    {
                        size_type   prior;

                        for(prior = i; ; )
                        {
                            if(0 == prior)
                            {
                                throw std::logic_error("No prior part to \"..\" for path canonicalisation");
                            }
                            else
                            {
                                --prior;

                                if( part::normal == parts[prior].type &&
                                    0 != parts[prior].len)
                                {
                                    parts[i].len = 0;
                                    parts[prior].len = 0;
                                    break;
                                }
                            }
                        }
                    }
                    break;
                case    part::normal:
                default:
                    break;
            }
        }
    }

    // 3. Write out all the parts back into the new path instance
    {
        size_type   i   =   0;

#ifdef _DEBUG
        memset(dest, '~', newPath.m_buffer.size() - (dest - &newPath.m_buffer[0]));
#endif /* _DEBUG */

        for(i = 0; i < parts.size(); ++i)
        {
            traits_type::str_n_copy(dest, parts[i].p, parts[i].len);

            dest += parts[i].len;
        }

        *dest = '\0';
        newPath.m_len = dest - newPath.c_str();
    }

    if(bRemoveTrailingPathNameSeparator)
    {
        newPath.pop_sep();
    }

    swap(newPath);

    return *this;
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::char_type const *basic_path<C, T, A>::get_file() const
{
    char_type const *slash      =   traits_type::str_rchr(stlsoft_ns_qual(c_str_ptr)(m_buffer), traits_type::path_name_separator());
    char_type const *slash_a    =   traits_type::str_rchr(stlsoft_ns_qual(c_str_ptr)(m_buffer), path_name_separator_alt());

    if(slash_a > slash)
    {
        slash = slash_a;
    }

    if(NULL == slash)
    {
        slash = stlsoft_ns_qual(c_str_ptr)(m_buffer);
    }
    else
    {
        ++slash;
    }

    return slash;
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::char_type const *basic_path<C, T, A>::get_ext() const
{
    char_type const         *dot    =   traits_type::str_rchr(this->c_str(), '.');
    char_type const         *file   =   get_file();
    static const char_type  s_empty[1]  =   { '\0' };

    if(NULL == dot)
    {
        return s_empty;
    }
    else if(dot < file)
    {
        return s_empty;
    }
    else
    {
        return dot + 1;
    }
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::size_type basic_path<C, T, A>::length() const
{
    return m_len;
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::size_type basic_path<C, T, A>::size() const
{
    return length();
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::char_type const *basic_path<C, T, A>::c_str() const
{
    return stlsoft_ns_qual(c_str_ptr)(m_buffer);
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::char_type const &basic_path<C, T, A>::operator [](ss_typename_type_k basic_path<C, T, A>::size_type index) const
{
    UNIXSTL_MESSAGE_ASSERT("Index out of range", !(size() < index));

    return c_str()[index];
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::exists() const
{
    return traits_type::file_exists(this->c_str());
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::is_rooted() const
{
    return traits_type::is_path_rooted(this->c_str());
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::is_absolute() const
{
    return traits_type::is_path_absolute(this->c_str());
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline ss_typename_type_k basic_path<C, T, A>::size_type basic_path<C, T, A>::copy(ss_typename_type_k basic_path<C, T, A>::char_type *buffer, ss_typename_type_k basic_path<C, T, A>::size_type cchBuffer) const
{
    return stlsoft_ns_qual(copy_contents)(buffer, cchBuffer, m_buffer.data(), m_len);
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::equivalent(basic_path<C, T, A> const &rhs) const
{
    return equivalent(rhs.c_str());
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::equivalent(ss_typename_type_k basic_path<C, T, A>::char_type const *rhs) const
{
    class_type  lhs_(*this);
    class_type  rhs_(rhs);

    return lhs_.make_absolute(false).canonicalise(true) == rhs_.make_absolute(false).canonicalise(true);
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::equal(basic_path<C, T, A> const &rhs) const
{
    return equal(rhs.c_str());
}

template<   ss_typename_param_k C
        ,   ss_typename_param_k T
        ,   ss_typename_param_k A
        >
inline us_bool_t basic_path<C, T, A>::equal(ss_typename_type_k basic_path<C, T, A>::char_type const *rhs) const
{
    return 0 == traits_type::str_compare(stlsoft_ns_qual(c_str_ptr)(m_buffer), stlsoft_ns_qual(c_str_ptr)(rhs));
}

#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/* ////////////////////////////////////////////////////////////////////// */

#ifndef _UNIXSTL_NO_NAMESPACE
# if defined(_STLSOFT_NO_NAMESPACE) || \
     defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
} // namespace unixstl
# else
} // namespace unixstl_project
} // namespace stlsoft
# endif /* _STLSOFT_NO_NAMESPACE */
#endif /* !_UNIXSTL_NO_NAMESPACE */

/* In the special case of Intel behaving as VC++ 7.0 or earlier on Win32, we
 * illegally insert into the std namespace.
 */
#if defined(STLSOFT_CF_std_NAMESPACE)
# if ( ( defined(STLSOFT_COMPILER_IS_INTEL) && \
         defined(_MSC_VER))) && \
     _MSC_VER < 1310
namespace std
{
    template<   ss_typename_param_k C
            ,   ss_typename_param_k T
            ,   ss_typename_param_k A
            >
    inline void swap(unixstl_ns_qual(basic_path)<C, T, A> &lhs, unixstl_ns_qual(basic_path)<C, T, A> &rhs)
    {
        lhs.swap(rhs);
    }
} // namespace std
# endif /* INTEL && _MSC_VER < 1310 */
#endif /* STLSOFT_CF_std_NAMESPACE */

/* /////////////////////////////////////////////////////////////////////////
 * Namespace
 *
 * The string access shims exist either in the stlsoft namespace, or in the
 * global namespace. This is required by the lookup rules.
 *
 */

#ifndef _UNIXSTL_NO_NAMESPACE
# if !defined(_STLSOFT_NO_NAMESPACE) && \
     !defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
namespace stlsoft
{
# else /* ? _STLSOFT_NO_NAMESPACE */
/* There is no stlsoft namespace, so must define in the global namespace */
# endif /* !_STLSOFT_NO_NAMESPACE */

using ::unixstl::c_str_ptr_null;
using ::unixstl::c_str_ptr_null_a;
using ::unixstl::c_str_ptr_null_w;

using ::unixstl::c_str_ptr;
using ::unixstl::c_str_ptr_a;
using ::unixstl::c_str_ptr_w;

using ::unixstl::c_str_data;
using ::unixstl::c_str_data_a;
using ::unixstl::c_str_data_w;

using ::unixstl::c_str_len;

#if 0
using ::unixstl::c_str_size;
#endif /* 0 */

# if !defined(_STLSOFT_NO_NAMESPACE) && \
     !defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
} // namespace stlsoft
# else /* ? _STLSOFT_NO_NAMESPACE */
/* There is no stlsoft namespace, so must define in the global namespace */
# endif /* !_STLSOFT_NO_NAMESPACE */
#endif /* !_UNIXSTL_NO_NAMESPACE */

/* ////////////////////////////////////////////////////////////////////// */

#endif /* UNIXSTL_INCL_UNIXSTL_FILESYSTEM_HPP_PATH */

/* ////////////////////////////////////////////////////////////////////// */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线|欧美| **欧美大码日韩| 国产精品全国免费观看高清| 亚洲综合区在线| 国产一区在线看| 欧美色网站导航| 中文字幕欧美一| 国产综合色视频| 欧美巨大另类极品videosbest| 亚洲国产精品ⅴa在线观看| 无码av中文一区二区三区桃花岛| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩国产成人在线91| 中文字幕av不卡| 国产一区二区不卡在线| 欧美高清精品3d| 日本午夜精品一区二区三区电影| 国产成人免费在线观看不卡| 91精品国产综合久久久蜜臀图片| 一区二区三区四区蜜桃 | 粉嫩13p一区二区三区| 欧美无人高清视频在线观看| 国产精品午夜久久| 国内精品在线播放| 日韩西西人体444www| 亚洲 欧美综合在线网络| 色先锋资源久久综合| 国产精品久久久久久久久免费桃花| 乱中年女人伦av一区二区| 欧美日韩一区二区三区在线| 亚洲少妇30p| 色综合网站在线| 亚洲美女少妇撒尿| 91视频国产观看| 亚洲色图欧洲色图婷婷| 91麻豆免费看片| 亚洲日本va午夜在线电影| 不卡av免费在线观看| 中文子幕无线码一区tr| 成人国产一区二区三区精品| 国产日产欧产精品推荐色| 国产一区在线不卡| 日本一区二区三区视频视频| 成人精品在线视频观看| 中文字幕中文字幕在线一区| 色偷偷88欧美精品久久久| 亚洲黄色在线视频| 欧美日韩一区二区在线观看视频| 午夜激情一区二区| 日韩欧美不卡在线观看视频| 国产真实乱对白精彩久久| 久久久91精品国产一区二区三区| 成人免费观看av| 一区二区三区小说| 日韩一级二级三级精品视频| 国产高清在线精品| 亚洲少妇屁股交4| 91精品国产全国免费观看| 国产精品99久久久久久久vr| 国产精品成人网| 欧美久久一二三四区| 国产在线看一区| 国产精品久久久久影院亚瑟| 欧美三级日本三级少妇99| 蜜臀av在线播放一区二区三区| 国产日韩精品一区二区三区在线| 99re热视频这里只精品| 婷婷成人激情在线网| 久久久久99精品国产片| 日本韩国欧美一区二区三区| 免费精品视频在线| 中文字幕一区二区三区四区不卡 | 国产精品三级在线观看| 91精品国产综合久久蜜臀| 国产一区二区三区在线观看免费 | 亚洲综合免费观看高清完整版| 欧美一级二级在线观看| 成人丝袜视频网| 免费欧美高清视频| 国产精品久久一卡二卡| 欧美日韩aaa| 成人免费高清在线| 免费成人你懂的| 中文字幕一区二区三区视频| 欧美一区二区日韩| 日本精品一级二级| 国产精品亚洲人在线观看| 亚洲第一主播视频| 最新国产の精品合集bt伙计| 日韩精品一区二区在线观看| 色婷婷av一区| 粉嫩av一区二区三区粉嫩| 美国av一区二区| 亚洲二区在线观看| 中文字幕日韩一区| 国产午夜精品久久| 精品成a人在线观看| 3751色影院一区二区三区| 一本到不卡免费一区二区| 国产91精品精华液一区二区三区 | 夜夜嗨av一区二区三区四季av| 久久影院视频免费| 欧美一区午夜视频在线观看 | 日韩毛片视频在线看| 久久日韩精品一区二区五区| 在线不卡中文字幕| 欧美色窝79yyyycom| 色综合一区二区三区| 波多野结衣亚洲| 国产乱码精品1区2区3区| 老司机一区二区| 日本中文字幕一区二区有限公司| 亚洲图片欧美色图| 一区二区三区高清在线| 亚洲美女一区二区三区| 亚洲视频在线一区| 亚洲欧洲日本在线| 1024国产精品| 日韩毛片视频在线看| 亚洲免费三区一区二区| 亚洲欧美偷拍卡通变态| 亚洲欧美日韩一区| 一区二区欧美精品| 亚洲小说欧美激情另类| 性做久久久久久免费观看欧美| 亚洲国产一区视频| 亚洲综合小说图片| 视频一区二区中文字幕| 日本aⅴ免费视频一区二区三区| 日韩avvvv在线播放| 美美哒免费高清在线观看视频一区二区| 日本aⅴ免费视频一区二区三区| 裸体一区二区三区| 国产盗摄一区二区| bt7086福利一区国产| 日本精品一级二级| 欧美高清性hdvideosex| 精品国产精品网麻豆系列| 久久久高清一区二区三区| 中文字幕在线免费不卡| 亚洲一区二区三区视频在线播放| 日韩激情视频网站| 精品一区二区三区视频| gogogo免费视频观看亚洲一| 日本高清无吗v一区| 欧美精品xxxxbbbb| 国产蜜臀av在线一区二区三区| 中文字幕一区二区日韩精品绯色| 亚洲国产精品一区二区www| 91色.com| 欧美日韩国产一区二区三区地区| 日韩午夜激情视频| 亚洲色图.com| 日韩国产欧美三级| 成人天堂资源www在线| 欧美日韩久久不卡| 国产亚洲一区二区三区四区| 亚洲狠狠丁香婷婷综合久久久| 免播放器亚洲一区| 蜜臀av一区二区在线观看| 日韩免费成人网| 国产女主播一区| 亚洲欧美日韩国产另类专区 | 337p粉嫩大胆噜噜噜噜噜91av| 欧美极品另类videosde| 亚洲444eee在线观看| 国产福利一区在线| 欧美精品日韩精品| 中文字幕亚洲成人| 久久99热这里只有精品| 91高清在线观看| 久久久久久久久久电影| 天天操天天色综合| 色狠狠色狠狠综合| 中文字幕免费观看一区| 蜜臀av一区二区三区| 色婷婷综合久久久中文一区二区 | 日韩精品免费专区| 成人午夜精品一区二区三区| 日韩一二在线观看| 亚洲mv在线观看| 95精品视频在线| 中文字幕免费一区| 国内精品国产成人| 91精品国产高清一区二区三区| 一区二区三区日韩精品视频| 国产不卡视频在线播放| 日韩精品一区二区三区视频| 亚洲午夜av在线| 色呦呦一区二区三区| 中文字幕一区二区在线观看| 国产成人免费视频| 久久奇米777| 国产精品一区二区三区乱码| 欧美日韩www| 日韩精品视频网| 91超碰这里只有精品国产| 午夜一区二区三区在线观看| 在线视频一区二区免费| 一区二区三区日本|