📄 special_string_instance.hpp
字号:
>::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 + -