rsmbmusicaplibmap.h

来自「索爱手机代码」· C头文件 代码 · 共 742 行 · 第 1/3 页

H
742
字号
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*--------------------------------------------------------------------*/
// FileName:
//	RSmbMusicAPLibMap.h
//
// Description:
//	PTX810 Music傾僾儕 儈儏乕僕僢僋嫟捠儔僀僽儔儕
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅			|曄峏幰			|撪梕
//--------------+---------------+--------------------------------------
//2006/09/23	|SEMC崃绮		|僼傽僀儖僔僗僥儉嫟捠儔僀僽儔儕偐傜愗傝弌偟

/** @file RSmbMusicAPLibMap.h
 *  STL 偺 @<map@> 憡摉丅
 *
 *  $Revision: 1.2 $ $Date: 2006/04/05 17:21:27 $
 */

#ifndef __RSMBMUSICAPLIB_MAP_H__
#define __RSMBMUSICAPLIB_MAP_H__

#include    "RSmbMusicAPLibVector.h"  	// for RSmbMusicAPLibVector<T, DeletePolicy>, TSmbMusicAPLib_NotDelete
#include    "TSmbMusicAPLibUtility.h" 	// for TSmbMusicAPLibPair<T1, T2>
#include    "TSmbMusicAPLibFunctional.h"  // for TSmbMusicAPLib_binary_function<Arg1, Arg2, Result>, TSmbMusicAPLib_less<T>




SEMCJ_NAMESPACE_BEGIN
MUSICAPLIB_NAMESPACE_BEGIN

/**
 *  {僉乕, 抣}偺儁傾傪曐帩偡傞楢憐婰壇僐儞僥僫丅
 *
 *  儐僯乕僋僉乕傪巊偄丄偦傟偵娭楢偯偗偨抣偵傾僋僙僗偱偒傞丄楢憐婰壇僐儞僥僫丅
 *  std::map<Key, T, Compare> 傪愝寁儌僨儖偲偟丄憃曽岦斀暅巕傪僒億乕僩偡傞丅
 *
 *  杮僐儞僥僫傪愝偗偨棟桼偼埲壓丅
 *      - SymbianOS 偵偼丄楢憐婰壇僨乕僞峔憿傪僒億乕僩偡傞僐儞僥僫偑丄側偄丅
 *      - 偟偐偟堦斒揑偵傾僾儕働乕僔儑儞偼丄{僉乕, 抣} 宆偺 1:n 娭楢僨乕僞峔憿傪丄昁梫偲偡傞偙偲偑懡偄丅
 *      - 側偺偵丄偙傟傪偡傋偰丄乽攝楍僨乕僞峔憿丄枅夞儖乕僾偟偰僉乕傪扵偡乿偱幚尰偡傞偺偼丄攏幁偘偰偄傞丅
 *
 *  final 偱偁傝丄攈惗棙梡傪梊掕偟側偄丅
 *
 *  @param[in]  Key             儐僯乕僋僉乕偺宆丅梫媮帠崁偼 std::map<Key, T, Compare> 偵摨偠丅
 *  @param[in]  T               抣偺宆丅梫媮帠崁偼 std::map<Key, T, Compare> 偵摨偠丅
 *  @param[in]  Compare         儐僯乕僋僉乕偺摍壙斾妑墘嶼丅僨僼僅儖僩偱偼 TSmbMusicAPLib_less 偑巊傢傟傞丅
 *  @param[in]  DeletePolicy    儁傾梫慺偺嶍彍億儕僔乕丅僐儞僥僫偐傜梫慺偑嶍彍偝傟傞偲偒 DeletePolicy::Destroy(T*&) 偑屇傃弌偝傟傞丅
 *
 *  @attention  std::map<Key, T, Compare> 偲姰慡偵摍壙偱偼側偄丅
 *              儁傾傪儐僯乕僋僉乕弴偵奿擺偟偨攝楍偲偄偆丄娙堈幚憰傪嵦偭偰偄傞偐傜偱偁傞丅
 *              廳梫側堘偄傪嫇偘傞偲丄埲壓丅
 *                  - 憓擖丒嶍彍偺寁嶼検偼 O(N) 偱偁傝 O(log N) 偱偼側偄丅
 *                  - 憓擖丒嶍彍憖嶌偵傛傝丄曉媝嵪傒斀暅巕偼柍岠偲側傞丅
 *                  - 斀暅巕偺幚嵺偺宆偼丄儔儞僟儉傾僋僙僗斀暅巕偱偁傞丅
 *  @attention  僥儞僾儗乕僩僷儔儊乕僞 @a DeletePolicy 偼丄std::map<Key, T, Compare> 旕屳姺偺僆儕僕僫儖偱偁傞丅
 *              SymbianOS 偱偼丄僗儅乕僩億僀儞僞偺幚尰偼晄壜擻側偺偱丄C* 僋儔僗僆僽僕僃僋僩傪強桳尃埾戸偱奿擺偡傞庤抜偑昁梫丄偲峫偊偨丅
 *
 *  @attention  @a DeletePolicy 偼丄僗儅乕僩億僀儞僞傎偳姰慡側摟夁懳嶔偱偼側偄丅 see RSmbMusicAPLibVector
 *
 *  @see    @ref Usage_RSmbMusicAPLibMap  "楢憐婰壇僐儞僥僫 RSmbMusicAPLibMap 偺棙梡曽朄"
 */
template<typename Key, typename T, class Compare = TSmbMusicAPLib_less<Key>, class DeletePolicy = TSmbMusicAPLib_NotDelete>
class RSmbMusicAPLibMap
    {
public:
    typedef Key                         key_type;       /**< 儐僯乕僋僉乕偺宆丅*/
    typedef T                           mapped_type;    /**< 儐僯乕僋僉乕偵娭楢偯偗傜傟傞抣偺宆丅*/
    typedef TSmbMusicAPLibPair<const Key, T>    value_type;     /**< 梫慺(儁傾)偺宆丅*/
    typedef Compare                     key_compare;    /**< 儐僯乕僋僉乕偺摍壙斾妑墘嶼巕丅*/
    /**
     *  梫慺偺斾妑擻椡傪帩偮娭悢僆僽僕僃僋僩丅
     *
     *  尰嵼偺儅僢僾偺斾妑墘嶼 key_compare 傪巊偄丄 value_type 抣傪斾妑偡傞擻椡偑偁傞丄娭悢僆僽僕僃僋僩丅
     */
    class value_compare : public TSmbMusicAPLib_binary_function<value_type, value_type, TBool>
        {
        friend class RSmbMusicAPLibMap<Key, T, Compare, DeletePolicy>;
    public:
        TBool operator()( const value_type& aLhs, const value_type& aRhs ) const
            {
            return iCmp( aLhs.iFirst, aRhs.iFirst );
            }
    protected:
        key_compare iCmp;
        value_compare( key_compare aCmp ) : iCmp(aCmp) {}
        }
    ;  // end of class value_compare
private:
    typedef RSmbMusicAPLibVector<value_type, DeletePolicy>  Vec;    /**< 塀暳偝傟偨幚懱僐儞僥僫偺宆丅 */
public:
    typedef typename Vec::pointer                   pointer;                /**< 梫慺(儁傾)傪巜偡億僀儞僞偺宆丅 */
    typedef typename Vec::const_pointer             const_pointer;          /**< const側梫慺(儁傾)傪巜偡億僀儞僞偺宆丅 */
    typedef typename Vec::reference                 reference;              /**< 梫慺(儁傾)偺嶲徠宆丅 */
    typedef typename Vec::const_reference           const_reference;        /**< const側梫慺(儁傾)偺嶲徠宆丅 */
    typedef typename Vec::iterator                  iterator;               /**< 梫慺(儁傾)傪巜偡斀暅巕偺宆丅 */
    typedef typename Vec::const_iterator            const_iterator;         /**< const側梫慺(儁傾)傪巜偡斀暅巕偺宆丅 */
    typedef typename Vec::reverse_iterator          reverse_iterator;       /**< 媡峴斀暅巕偺宆丅 */
    typedef typename Vec::const_reverse_iterator    const_reverse_iterator; /**< 媡峴斀暅巕(const)偺宆丅 */
    typedef typename Vec::size_type                 size_type;              /**< 梫慺(儁傾)悢側偳偺昞尰偵梡偄傞宆丅 */
    typedef typename Vec::difference_type           difference_type;        /**< 梫慺(儁傾)娫偺嫍棧側偳偺昞尰偵梡偄傞宆丅 */

public:
    /**
     *  僐儞僗僩儔僋僞丅
     *
     *  嬻偭傐偺儅僢僾傪嶌惉偡傞丅
     *
     *  @param[in]  aCmp   儐僯乕僋僉乕偺摍壙斾妑墘嶼丅
     */
    explicit RSmbMusicAPLibMap( const key_compare& aCmp=key_compare() );
    /**
     *  僐僺乕僐儞僗僩儔僋僞丅
     *
     *  @param[in]  aRhs    僐僺乕尦丅
     *  @attention  Leave 偟偆傞丅 STL僐儞僥僫偲摨偠乽抣偺僙儅儞僥傿僋僗乿偲偟偨偄偨傔丄SymbianOS 偺尨懃奜偱偁傞偙偲偼彸抦偺忋偱丄偁偊偰偙偆偟偰偄傞丅
     *              偨偩偟丄Leave 敪惗帪偱傕儊儌儕儕乕僋偼敪惗偝偣側偄丄懳嶔幚憰偼堊偝傟偰偄傞丅
     */
    RSmbMusicAPLibMap( const RSmbMusicAPLibMap& aRhs );
    /**
     *  僐儞僗僩儔僋僞丅
     *
     *  斖埻 [@a aFirst, @a aLast) 偺梫慺偺抣僐僺乕偐傜惉傞儅僢僾傪嶌惉偡傞丅
     *      - 巜掕斀暅巕偑 TSmbMusicAPLibPair<Key, T> 宆偺抣傪曉偟丄
     *      - 偦偺 key 抣偑偡傋偰斖埻撪儐僯乕僋偱偁傞
     *
     *  応崌偺傒丄惉岟偑曐徹偝傟傞丅
     *
     *  @param[in]  aFirst  擖椡奐巒埵抲丅
     *  @param[in]  aLast   擖椡廔椆埵抲丅
     *  @param[in]  aCmp    儐僯乕僋僉乕偺摍壙斾妑墘嶼丅
     *  @attention  Leave 偟偆傞丅 STL僐儞僥僫偲摨偠乽抣偺僙儅儞僥傿僋僗乿偲偟偨偄偨傔丄SymbianOS 偺尨懃奜偱偁傞偙偲偼彸抦偺忋偱丄偁偊偰偙偆偟偰偄傞丅
     *              偨偩偟丄Leave 敪惗帪偱傕儊儌儕儕乕僋偼敪惗偝偣側偄丄懳嶔幚憰偼堊偝傟偰偄傞丅
     */
    template<typename InputIterator>
    RSmbMusicAPLibMap( InputIterator aFirst, InputIterator aLast, const key_compare& aCmp=key_compare() );
    /**
     *  僨僗僩儔僋僞丅
     *
     *  Release() 傪屇傃弌偡丅
     *
     *  @attention  SymbianOS 偵偍偗傞 R* 僋儔僗偺尨懃偐傜偼偼偢傟傞偑丄robustness 偺偨傔偵僨僗僩儔僋僞傪愝偗傞丅
     */
    ~RSmbMusicAPLibMap();

    /**
     *  戙擖墘嶼巕丅
     *
     *  @param[in]  aRhs    僐僺乕尦丅
     *  @return *this 傪曉偡丅
     *  @attention  Leave 偟偆傞丅
     */
    RSmbMusicAPLibMap& operator=( const RSmbMusicAPLibMap& aRhs );

    /**
     *  嵟弶偺梫慺傪億僀儞僩偡傞斀暅巕傪曉偡丅
     *
     *  @return 嵟弶偺梫慺傪億僀儞僩偡傞斀暅巕丅
     */
    iterator Begin();
    /**
     *  嵟弶偺梫慺傪億僀儞僩偡傞斀暅巕傪曉偡丅
     *
     *  @return 嵟弶偺梫慺傪億僀儞僩偡傞斀暅巕丅
     */
    const_iterator Begin() const;
    /**
     *  嵟屻偺梫慺偺捈屻偺梫慺傪億僀儞僩偡傞斀暅巕傪曉偡丅
     *
     *  @return 嵟屻偺梫慺偺捈屻偺梫慺傪億僀儞僩偡傞斀暅巕丅
     */
    iterator End();
    /**
     *  嵟屻偺梫慺偺捈屻偺梫慺傪億僀儞僩偡傞斀暅巕傪曉偡丅
     *
     *  @return 嵟屻偺梫慺偺捈屻偺梫慺傪億僀儞僩偡傞斀暅巕丅
     */
    const_iterator End() const;

    /**
     *  End() 傪巜偡媡峴斀暅巕傪曉偡丅
     *
     *  @return End() 傪巜偡媡峴斀暅巕丅
     */
    reverse_iterator RBegin();
    /**
     *  End() const 傪巜偡媡峴斀暅巕傪曉偡丅
     *
     *  @return End() const 傪巜偡媡峴斀暅巕丅
     */
    const_reverse_iterator RBegin() const;
    /**
     *  Begin() 傪巜偡媡峴斀暅巕傪曉偡丅
     *
     *  @return Begin() 傪巜偡媡峴斀暅巕丅
     */
    reverse_iterator REnd();
    /**
     *  Begin() const 傪巜偡媡峴斀暅巕傪曉偡丅
     *
     *  @return Begin() const 傪巜偡媡峴斀暅巕丅
     */
    const_reverse_iterator REnd() const;

    /**
     *  偙偺儅僢僾偑嬻偱偁傞偐傪曉偡丅
     *
     *  @return 偙偺儅僢僾偑嬻偱偁傟偽恀傪丄偦偆偱側偗傟偽婾傪曉偡丅
     */
    TBool Empty() const;
    /**
     *  偙偺儅僢僾偺梫慺悢傪曉偡丅
     *
     *  @return 偙偺儅僢僾偺梫慺悢丅
     */
    size_type Size() const;
    /**
     *  儅僢僾偺嵟戝壜擻梫慺悢傪曉偡丅
     *
     *  @return 儅僢僾偺嵟戝壜擻梫慺悢丅
     *  @attention  杮棃側傜偽 @a Key 宆偑昞尰偟偆傞儐僯乕僋僉乕抣偺憤悢偺傒偵惂尷偝傟傞偼偢偱偁傞偑丄
     *              偦偆側偭偰偄側偄丅攝楍僐儞僥僫偺彅尦撪偵側傞丅 see RSmbMusicAPLibVector::Max_size()
     */
    size_type Max_size() const;

    /**
     *  巜掕僉乕傪帩偮梫慺偺扵嶕丄側偗傟偽憓擖丅
     *
     *  僉乕 @a aKey 偺梫慺偑儅僢僾撪偵懚嵼偡傞応崌偼丄偦傟偵娭楢晅偗傜傟偨抣傊偺嶲徠傪曉偡丅
     *  懚嵼偟側偄応崌偼 {aKey, T()} 偺梫慺儁傾傪儅僢僾偵憓擖偟偰丄僨僼僅儖僩弶婜抣側抣傊偺嶲徠傪曉偡丅
     *
     *  @param[in]  aKey    懳徾僉乕丅
     *  @return @a aKey 偵娭楢偯偗傜傟偨抣梫慺傊偺嶲徠丅
     *  @attention  std::map<Key, T, Compare> 偲摨偠僙儅儞僥傿僋僗偺暋崌婡擻偱偁傞丅
     *              const側儅僢僾偵懳偟偰巊梡偡傞偙偲偼偱偒側偄丅
     *              const嶲徠偺傒偑庤尦偵偁傝丄扵嶕偺傒傪栚揑偲偡傞応崌偼丄
     *              Count(const key_type&) const, Find(const key_type&) const 摍傪巊梡偡傞偙偲丅
     *  @attention  Leave 偟偆傞丅
     */
    mapped_type& operator[]( const key_type& aKey );

    /**
     *  梫慺偺憓擖丅
     *
     *  摨堦僉乕偑懚嵼偟側偄応崌偵尷傝丄巜掕梫慺偺抣僐僺乕傪偙偺儅僢僾撪偵憓擖偡傞丅
     *
     *  @param[in]  aVal    懳徾梫慺丅

⌨️ 快捷键说明

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