⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 special_string_instance.hpp

📁 新版本TR1的stl
💻 HPP
📖 第 1 页 / 共 3 页
字号:
                                                >::type                         implicit_conversion_type;
private:
    // This section accounts for whether the policy indicates shared state.
    // If so, then the buffer type resolves to the appropriate
    // specialisation of ssi_buffer_static, which stores a threadsafe buffer
    // shared by all instances. If not, then the buffer type resolves to
    // ssi_buffer_non_static, which stores a buffer per instance.
    enum
    {
        policy_indicates_shared_state   =   (0 != policy_type::sharedState)
    };

    enum { internalBufferSize = policy_type::internalBufferSize };
    typedef ssi_buffer_static<      char_type
                                ,   internalBufferSize
                                ,   allocator_type
                                ,   argument_0_type
                                ,   policy_type // Passes policy type, from which spin_mutex_type is elicited, so non-statics do not need to specify it
                                >                                               ssi_buffer_static_type;
    typedef ssi_buffer_non_static<  char_type
                                ,   internalBufferSize
                                ,   allocator_type
                                ,   argument_0_type
                                >                                               ssi_buffer_non_static_type;

    typedef ss_typename_type_k select_first_type_if<ssi_buffer_static_type
                                                ,   ssi_buffer_non_static_type
                                                ,   policy_indicates_shared_state
                                                >::type                         buffer_type;

/// @}

/// \name Construction
/// @{
public:
    special_string_instance_1(argument_0_type argument)
        : m_buffer(argument, policy_type::get_fn())
    {}
/// @}

/// \name Operations
/// @{
public:
    static size_type get(argument_0_type argument, char_type* buffer, size_type cchBuffer)
    {
        return (policy_type::get_fn())(argument, buffer, cchBuffer);
    }
/// @}

/// \name Attributes
/// @{
public:
    char_type const* c_str() const
    {
        return m_buffer.data();
    }
    char_type const* data() const
    {
        return m_buffer.data();
    }
    size_type       length() const
    {
        return m_buffer.length();
    }
    size_type       size() const
    {
        return length();
    }

#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
    cstring_a_type  c_str_a() const
    {
        return c_str();
    }
    cstring_w_type  c_str_w() const
    {
        return c_str();
    }
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */
/// @}

/// \name Operators
/// @{
public:
#if !defined(STLSOFT_COMPILER_IS_BORLAND)
    operator implicit_conversion_type () const
    {
        return this->c_str();
    }
#endif /* compiler */
/// @}

/// \name Member Types
/// @{
private:
    buffer_type     m_buffer;
/// @}
};

/* /////////////////////////////////////////////////////////////////////////
 * Shims
 */

/** \brief \ref group__concept__shim__string_access__c_str_ptr_null for stlsoft::special_string_instance_0
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::char_type const* c_str_ptr_null(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str() : NULL;
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_a_type c_str_ptr_null_a(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str_a() : NULL;
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_w_type c_str_ptr_null_w(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str_w() : NULL;
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_ptr for stlsoft::special_string_instance_0
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::char_type const* c_str_ptr(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_a_type c_str_ptr_a(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str_a();
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_w_type c_str_ptr_w(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str_w();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_data for stlsoft::special_string_instance_0
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::char_type const* c_str_data(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_a_type c_str_data_a(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str_a();
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_0<P>::cstring_w_type c_str_data_w(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.c_str_w();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_len for stlsoft::special_string_instance_0
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_size_t c_str_len(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    return ssi.length();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_size_t c_str_len_a(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    // If this fires, you're trying to invoke c_str_len_w() on an SSI
    // whose policy defines the character type to be something other
    // than char.
    ss_char_a_t const   *special_string_instance_must_use_narrow_character  =   ssi.c_str_a();

    STLSOFT_SUPPRESS_UNUSED(special_string_instance_must_use_narrow_character);

    return ssi.length();
}
template <ss_typename_param_k P>
inline ss_size_t c_str_len_w(stlsoft_ns_qual(special_string_instance_0)<P> const& ssi)
{
    // If this fires, you're trying to invoke c_str_len_w() on an SSI
    // whose policy defines the character type to be something other
    // than wchar_t.
    ss_char_w_t const   *special_string_instance_must_use_wide_character    =   ssi.c_str_w();

    STLSOFT_SUPPRESS_UNUSED(special_string_instance_must_use_wide_character);

    return ssi.length();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_ptr_null for stlsoft::special_string_instance_1
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::char_type const* c_str_ptr_null(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str() : NULL;
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_a_type c_str_ptr_null_a(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str_a() : NULL;
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_w_type c_str_ptr_null_w(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return (0 != ssi.length()) ? ssi.c_str_w() : NULL;
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_ptr for stlsoft::special_string_instance_1
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::char_type const* c_str_ptr(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_a_type c_str_ptr_a(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str_a();
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_w_type c_str_ptr_w(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str_w();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_data for stlsoft::special_string_instance_1
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::char_type const* c_str_data(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_a_type c_str_data_a(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str_a();
}
template <ss_typename_param_k P>
inline ss_typename_type_k special_string_instance_1<P>::cstring_w_type c_str_data_w(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.c_str_w();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

/** \brief \ref group__concept__shim__string_access__c_str_len for stlsoft::special_string_instance_1
 *
 * \ingroup group__concept__shim__string_access
 */
template <ss_typename_param_k P>
inline ss_size_t c_str_len(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    return ssi.length();
}
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
template <ss_typename_param_k P>
inline ss_size_t c_str_len_a(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    // If this fires, you're trying to invoke c_str_len_w() on an SSI
    // whose policy defines the character type to be something other
    // than char.
    ss_char_a_t const   *special_string_instance_must_use_narrow_character  =   ssi.c_str_a();

    STLSOFT_SUPPRESS_UNUSED(special_string_instance_must_use_narrow_character);

    return ssi.length();
}
template <ss_typename_param_k P>
inline ss_size_t c_str_len_w(stlsoft_ns_qual(special_string_instance_1)<P> const& ssi)
{
    // If this fires, you're trying to invoke c_str_len_w() on an SSI
    // whose policy defines the character type to be something other
    // than wchar_t.
    ss_char_w_t const   *special_string_instance_must_use_wide_character    =   ssi.c_str_w();

    STLSOFT_SUPPRESS_UNUSED(special_string_instance_must_use_wide_character);

    return ssi.length();
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

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

#ifndef _STLSOFT_NO_NAMESPACE
} // namespace stlsoft
#endif /* _STLSOFT_NO_NAMESPACE */

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

#endif /* !STLSOFT_INCL_STLSOFT_STRING_HPP_SPECIAL_STRING_INSTANCE */

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -