📄 tsmbmusicaplibiterator.h
字号:
* 僐儞僥僫偵梫慺傪捛壛偡傞偨傔偺憓擖斀暅巕丅
* 僐儞僥僫偺儊儞僶 Push_backL(const T&) 傪巊偭偰丄枛旜偵梫慺傪捛壛弌椡偡傞丅
*/
template<typename Container>
class TSmbMusicAPLib_back_insert_iterator : public TSmbMusicAPLib_iterator<TSmbMusicAPLib_output_iterator_tag, void, void, void, void>
{
public:
typedef Container container_type;
public:
explicit TSmbMusicAPLib_back_insert_iterator( Container& aContainer ) : iContainer( &aContainer ) {}
TSmbMusicAPLib_back_insert_iterator& operator=( typename Container::const_reference aVal )
{
// :leavescan off:
iContainer->Push_backL( aVal );
// :leavescan on:
return *this;
}
TSmbMusicAPLib_back_insert_iterator& operator*()
{
return *this;
}
TSmbMusicAPLib_back_insert_iterator& operator++()
{
return *this;
}
TSmbMusicAPLib_back_insert_iterator operator++( int )
{
return *this;
}
protected:
Container* iContainer;
}; // end of TSmbMusicAPLib_back_insert_iterator
/**
* 憓擖斀暅巕傪曉偡僿儖僷乕丅
*
* 堷悢 aContainer 偐傜僐儞僥僫偺宆傪墘銏寛掕偟丄憓擖斀暅巕傪惗惉偟偰曉偡丅
*
* @param[out] aContainer 懳徾僐儞僥僫丅
* @return @a aContainer 偺枛旜偵捛壛弌椡偡傞憓擖斀暅巕丅
* @attention 杮儊僜僢僪帺懱偼 Leave 偟側偄偑丄L晅偒娭悢柤偲偟偰偄傞丅
* 曉媝僆僽僕僃僋僩傪巊偊偽 Leave 偟偆傞偺偱丄杮僿儖僷乕偺幚嵺偺巊梡宍懺偐傜峫偊傞偲丄
* 偙偆偟偨曽偑 L convention 杮棃偺栚揑偵揔偆偲敾抐偟偨丅
*/
template<typename Container>
inline TSmbMusicAPLib_back_insert_iterator<Container> Back_inserterL( Container& aContainer )
{
return TSmbMusicAPLib_back_insert_iterator<Container>( aContainer );
}
/**
* 憓擖斀暅巕丅
*
* 僐儞僥僫偵梫慺傪捛壛偡傞偨傔偺憓擖斀暅巕丅
* 僐儞僥僫偺儊儞僶 Push_frontL(const T&) 傪巊偭偰丄愭摢偵梫慺傪捛壛弌椡偡傞丅
*/
template<typename Container>
class TSmbMusicAPLib_front_insert_iterator : public TSmbMusicAPLib_iterator<TSmbMusicAPLib_output_iterator_tag, void, void, void, void>
{
public:
typedef Container container_type;
public:
explicit TSmbMusicAPLib_front_insert_iterator( Container& aContainer ) : iContainer( &aContainer ) {}
TSmbMusicAPLib_front_insert_iterator& operator=( typename Container::const_reference aVal )
{
// :leavescan off:
iContainer->Push_frontL( aVal );
// :leavescan on:
return *this;
}
TSmbMusicAPLib_front_insert_iterator& operator*()
{
return *this;
}
TSmbMusicAPLib_front_insert_iterator& operator++()
{
return *this;
}
TSmbMusicAPLib_front_insert_iterator operator++( int )
{
return *this;
}
protected:
Container* iContainer;
}; // end of TSmbMusicAPLib_front_insert_iterator
/**
* 憓擖斀暅巕傪曉偡僿儖僷乕丅
*
* 堷悢 aContainer 偐傜僐儞僥僫偺宆傪墘銏寛掕偟丄憓擖斀暅巕傪惗惉偟偰曉偡丅
*
* @param[out] aContainer 懳徾僐儞僥僫丅
* @return @a aContainer 偺愭摢偵捛壛弌椡偡傞憓擖斀暅巕丅
* @attention 杮儊僜僢僪帺懱偼 Leave 偟側偄偑丄L晅偒娭悢柤偲偟偰偄傞丅
* 曉媝僆僽僕僃僋僩傪巊偊偽 Leave 偟偆傞偺偱丄杮僿儖僷乕偺幚嵺偺巊梡宍懺偐傜峫偊傞偲丄
* 偙偆偟偨曽偑 L convention 杮棃偺栚揑偵揔偆偲敾抐偟偨丅
*/
template<typename Container>
inline TSmbMusicAPLib_front_insert_iterator<Container> Front_inserterL( Container& aContainer )
{
return TSmbMusicAPLib_front_insert_iterator<Container>( aContainer );
}
/**
* 憓擖斀暅巕丅
*
* 僐儞僥僫偵梫慺傪捛壛偡傞偨傔偺憓擖斀暅巕丅
* 僐儞僥僫偺儊儞僶 InsertL(Iterator, const T&) 傪巊偭偰丄巜掕埵抲偵梫慺傪憓擖偡傞丅
*/
template<typename Container>
class TSmbMusicAPLib_insert_iterator : public TSmbMusicAPLib_iterator<TSmbMusicAPLib_output_iterator_tag, void, void, void, void>
{
public:
typedef Container container_type;
public:
TSmbMusicAPLib_insert_iterator( Container& aContainer, typename Container::iterator aIter ) : iContainer(&aContainer), iIter(aIter) {}
TSmbMusicAPLib_insert_iterator& operator=( const typename Container::const_reference aVal )
{
// :leavescan off:
iIter = iContainer->InsertL( iIter, aVal );
// :leavescan on:
++iIter;
return *this;
}
TSmbMusicAPLib_insert_iterator& operator*()
{
return *this;
}
TSmbMusicAPLib_insert_iterator& operator++()
{
return *this;
}
TSmbMusicAPLib_insert_iterator& operator++( int )
{
return *this;
}
protected:
Container* iContainer;
typename Container::iterator iIter;
}; // end of TSmbMusicAPLib_insert_iterator
/**
* 憓擖斀暅巕傪曉偡僿儖僷乕丅
*
* 堷悢 aContainer 偐傜僐儞僥僫偺宆傪墘銏寛掕偟丄憓擖斀暅巕傪惗惉偟偰曉偡丅
*
* @param[out] aContainer 懳徾僐儞僥僫丅
* @param[in] aIter 憓擖埵抲丅
* @return @a aContainer 偺埵抲 @a aIter 偵梫慺傪憓擖偡傞憓擖斀暅巕丅
*/
template<typename Container, typename Iterator>
inline TSmbMusicAPLib_insert_iterator<Container> Inserter( Container& aContainer, Iterator aIter )
{
return TSmbMusicAPLib_insert_iterator<Container>( aContainer, typename Container::iterator(aIter) );
}
namespace detail {
using MUSICAPLIB_NAMESPACE::TSmbMusicAPLib_iterator_traits;
using MUSICAPLIB_NAMESPACE::TSmbMusicAPLib_iterator;
/**
* '僲乕儅儖' 側斀暅巕傪娙扨偵嶌傞偨傔偺傾僟僾僞丅
*
* 旕class側斀暅巕(揟宆揑偵偼 pointer)傪丄斀暅巕僋儔僗偲偟偰巊梡偱偒傞傛偆偵偡傞丅
*/
template<typename Iterator, typename Container>
class TSmbMusicAPLib_normal_iterator
{
public:
typedef typename TSmbMusicAPLib_iterator_traits<Iterator>::iterator_category iterator_category; /**< 斀暅巕偺庬椶傪昞偡僇僥僑儕丅 */
typedef typename TSmbMusicAPLib_iterator_traits<Iterator>::value_type value_type; /**< 斀暅巕偑埖偆梫慺偺宆丅 */
typedef typename TSmbMusicAPLib_iterator_traits<Iterator>::difference_type difference_type; /**< 斀暅巕娫偺嵎(嫍棧)傪昞偡宆丅 */
typedef typename TSmbMusicAPLib_iterator_traits<Iterator>::pointer pointer; /**< 斀暅巕偑埖偆梫慺偺億僀儞僞宆丅 */
typedef typename TSmbMusicAPLib_iterator_traits<Iterator>::reference reference; /**< 斀暅巕偑埖偆梫慺偺嶲徠宆丅 */
public:
TSmbMusicAPLib_normal_iterator() : iCurrent(Iterator()) {}
explicit TSmbMusicAPLib_normal_iterator( const Iterator& aRhs ) : iCurrent(aRhs) {}
template<typename Iter>
TSmbMusicAPLib_normal_iterator( const TSmbMusicAPLib_normal_iterator<Iter, Container>& aRhs ) : iCurrent(aRhs.Base()) {}
reference operator*() const
{
return *iCurrent;
}
pointer operator->() const
{
return iCurrent;
}
TSmbMusicAPLib_normal_iterator& operator++()
{
++iCurrent;
return *this;
}
TSmbMusicAPLib_normal_iterator operator++( int )
{
return TSmbMusicAPLib_normal_iterator( iCurrent++ );
}
TSmbMusicAPLib_normal_iterator& operator--()
{
--iCurrent;
return *this;
}
TSmbMusicAPLib_normal_iterator operator--( int )
{
return TSmbMusicAPLib_normal_iterator( iCurrent-- );
}
reference operator[]( difference_type aDiffer ) const
{
return iCurrent[ aDiffer ];
}
TSmbMusicAPLib_normal_iterator& operator+=( const difference_type& aDiffer )
{
iCurrent += aDiffer;
return *this;
}
TSmbMusicAPLib_normal_iterator operator+( const difference_type& aDiffer ) const
{
return TSmbMusicAPLib_normal_iterator( iCurrent + aDiffer );
}
TSmbMusicAPLib_normal_iterator& operator-=( const difference_type& aDiffer )
{
iCurrent -= aDiffer;
return *this;
}
TSmbMusicAPLib_normal_iterator operator-( const difference_type& aDiffer ) const
{
return TSmbMusicAPLib_normal_iterator( iCurrent - aDiffer );
}
const Iterator& Base() const
{
return iCurrent;
}
protected:
Iterator iCurrent;
}; // end of TSmbMusicAPLib_normal_iterator
// 慜曽岦斀暅巕偺梫審
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator==( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() == aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator==( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() == aRhs.Base();
}
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator!=( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() != aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator!=( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() != aRhs.Base();
}
// 儔儞僟儉傾僋僙僗斀暅巕偺梫審
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator<( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() < aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator<( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() < aRhs.Base();
}
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator>( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() > aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator>( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() > aRhs.Base();
}
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator<=( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() <= aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator<=( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() <= aRhs.Base();
}
template<typename IteratorL, typename IteratorR, typename Container>
inline TBool operator>=( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() >= aRhs.Base();
}
template<typename Iterator, typename Container>
inline TBool operator>=( const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aRhs )
{
return aLhs.Base() >= aRhs.Base();
}
// iterator/const_iterator 偺儈僢僋僗懳嶔丅
template<typename IteratorL, typename IteratorR, typename Container>
inline typename TSmbMusicAPLib_normal_iterator<IteratorL, Container>::difference_type operator-( const TSmbMusicAPLib_normal_iterator<IteratorL, Container>& aLhs, const TSmbMusicAPLib_normal_iterator<IteratorR, Container>& aRhs )
{
return aLhs.Base() - aRhs.Base();
}
template<typename Iterator, typename Container>
inline TSmbMusicAPLib_normal_iterator<Iterator, Container> operator+( typename TSmbMusicAPLib_normal_iterator<Iterator, Container>::difference_type aDiffer, const TSmbMusicAPLib_normal_iterator<Iterator, Container>& aIter )
{
return TSmbMusicAPLib_normal_iterator<Iterator, Container>( aIter.Base() + aDiffer );
}
} // end of namespace detail
MUSICAPLIB_NAMESPACE_END
SEMCJ_NAMESPACE_END
#endif // __TSMBMUSICAPLib_ITERATOR_H__
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -