📄 pod_vector.hpp
字号:
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::resize(size_type cItems) /* stlsoft_throw_1(stlsoft_ns_qual_std(bad_alloc) ) */
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
// We only resize if we're getting bigger, or the requested size is 0
if( (0 != cItems &&
cItems < size()) ||
m_buffer.resize(cItems))
{
m_cItems = cItems;
}
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::resize(ss_typename_type_k pod_vector<T, A, SPACE>::size_type cItems, ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value) /* stlsoft_throw_1(stlsoft_ns_qual_std(bad_alloc) ) */
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::resize(size_type cItems, ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value) /* stlsoft_throw_1(stlsoft_ns_qual_std(bad_alloc) ) */
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
// We only resize if we're getting bigger, or the requested size is 0
if( 0 != cItems &&
cItems < m_cItems)
{
m_cItems = cItems;
}
else if(m_cItems < cItems)
{
if(m_buffer.resize(cItems))
{
pod_fill_n(begin_() + m_cItems, cItems - m_cItems, value);
m_cItems = cItems;
}
}
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::push_back(ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::push_back(ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
insert(end(), value);
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
inline void pod_vector<T, A, SPACE>::pop_back()
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_MESSAGE_ASSERT("No elements to pop", size() > 0);
if(0 == --m_cItems)
{
m_buffer.resize(0);
}
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::assign(ss_typename_type_k pod_vector<T, A, SPACE>::const_iterator first, ss_typename_type_k pod_vector<T, A, SPACE>::const_iterator last)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::assign(const_iterator first, const_iterator last)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
// NOTE: This will be optimised by testing the contents of this and the rhs
class_type temp(first, last);
temp.swap(*this);
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::assign(ss_typename_type_k pod_vector<T, A, SPACE>::size_type cItems, ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value /* = value_type() */)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::assign(size_type cItems, value_type const& value /* = value_type() */)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
// NOTE: This will be optimised by testing the contents of this and the rhs
class_type temp(cItems, value);
temp.swap(*this);
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::insert(ss_typename_type_k pod_vector<T, A, SPACE>::iterator it, ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value /* = value_type() */)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::insert(iterator it, value_type const& value /* = value_type() */)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_ASSERT(!(end() < it));
STLSOFT_ASSERT(!(it < begin()));
size_type index = static_cast<size_type>(it - begin());
insert(it, 1, value);
STLSOFT_ASSERT(is_valid_());
return begin() + index;
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::insert(ss_typename_type_k pod_vector<T, A, SPACE>::iterator it, ss_typename_type_k pod_vector<T, A, SPACE>::size_type cItems, ss_typename_type_k pod_vector<T, A, SPACE>::value_type const& value)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::insert(iterator it, size_type cItems, value_type const& value)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_ASSERT(!(end() < it));
STLSOFT_ASSERT(!(it < begin()));
size_type curr_size = size();
size_type index = static_cast<size_type>(it - begin());
if(resize_(size() + cItems))
{
size_type cMove = curr_size - index;
// The resize_ may have invalidated the iterator(s)!!
it = begin() + index;
// Move the existing ones up out of the way
pod_move_n(&it[cItems], &it[0], cMove);
// And insert the new ones
pod_fill_n(begin_() + index, cItems, value);
}
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline void pod_vector<T, A, SPACE>::insert(ss_typename_type_k pod_vector<T, A, SPACE>::iterator it, ss_typename_type_k pod_vector<T, A, SPACE>::const_iterator first, ss_typename_type_k pod_vector<T, A, SPACE>::const_iterator last)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline void pod_vector<T, A, SPACE>::insert(iterator it, const_iterator first, const_iterator last)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_ASSERT(!(end() < it));
STLSOFT_ASSERT(!(it < begin()));
size_type curr_size = size();
size_type index = it - begin();
size_type cItems = last - first;
if(resize_(size() + cItems))
{
size_type cMove = curr_size - index;
// The resize_ may have invalidated the iterator(s)!!
it = begin() + index;
// Move the existing ones up out of the way
pod_move_n(&it[cItems], &it[0], cMove);
// And insert the new ones
pod_copy_n(begin_(), first, cItems);
}
STLSOFT_ASSERT(is_valid_());
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::erase(ss_typename_type_k pod_vector<T, A, SPACE>::iterator it)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::erase(iterator it)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_ASSERT(it < end());
STLSOFT_ASSERT(!(it < begin()));
if(it != end() - 1)
{
pod_move_n(&it[0], &it[1], 1);
}
if(0 == --m_cItems)
{
m_buffer.resize(0);
}
STLSOFT_ASSERT(is_valid_());
return it;
}
template< ss_typename_param_k T
, ss_typename_param_k A
, ss_size_t SPACE
>
#if defined(STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED)
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::erase(ss_typename_type_k pod_vector<T, A, SPACE>::iterator first, ss_typename_type_k pod_vector<T, A, SPACE>::iterator last)
#else /* ? STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
inline ss_typename_type_k pod_vector<T, A, SPACE>::iterator pod_vector<T, A, SPACE>::erase(iterator first, iterator last)
#endif /* STLSOFT_CF_FUNCTION_SIGNATURE_FULL_ARG_QUALIFICATION_REQUIRED */
{
STLSOFT_ASSERT(is_valid_());
STLSOFT_ASSERT(first < end());
STLSOFT_ASSERT(!(first < begin()));
STLSOFT_ASSERT(!(end() < last));
STLSOFT_ASSERT(!(last < begin()));
size_type curr_size = size();
size_type index_first = first - begin();
size_type index_last = last - begin();
size_type cItems = last - first;
size_type cMove = curr_size - index_last;
// Move the remaining ones down
pod_move_n(&first[0], &last[0], cMove);
resize(curr_size - cItems);
STLSOFT_ASSERT(is_valid_());
return begin() + index_first;
}
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */
/* ////////////////////////////////////////////////////////////////////// */
#ifndef _STLSOFT_NO_NAMESPACE
} // namespace stlsoft
#endif /* _STLSOFT_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 T
, ss_typename_param_k A
, stlsoft_ns_qual(ss_size_t) SPACE
>
inline void swap(stlsoft_ns_qual(pod_vector)<T, A, SPACE>& lhs, stlsoft_ns_qual(pod_vector)<T, A, SPACE>& rhs)
{
lhs.swap(rhs);
}
} // namespace std
# endif /* INTEL && _MSC_VER < 1310 */
#endif /* STLSOFT_CF_std_NAMESPACE */
/* ////////////////////////////////////////////////////////////////////// */
#endif /* !STLSOFT_INCL_STLSOFT_CONTAINERS_HPP_POD_VECTOR */
/* ////////////////////////////////////////////////////////////////////// */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -