📄 rsmbmusicaplibvector.h
字号:
/**
* 巜掕儊儌儕埵抲偺僆僽僕僃僋僩攋婞丅
*
* 傾僪儗僗 @a aPtr 偺梫慺 @a T 偺僨僗僩儔僋僞傪屇傃弌偡丅
* DeletePolicy 偺僩儕僈乕栶傕壥偨偡丅
*
* @param[in] aPtr 懳徾儊儌儕傾僪儗僗丅
*/
static void Destroy( value_type* aPtr );
/**
* 巜掕斖埻偺僆僽僕僃僋僩攋婞丅
*
* Destroy(value_type*) 偺斖埻巜掕 wrapper 僶乕僕儑儞丅
*
* @param[in] aFirst 奐巒埵抲丅
* @param[in] aLast 廔椆埵抲丅
*/
static void Destroy( iterator aFirst, iterator aLast );
private:
/**
* 婰壇屔杮懱丅
*
* std::vector<T> 偺巇條丄
* - 梫慺宆 T 偼扨堦(暋悢宆偺梫慺崿嵼偼擣傔側偄)
* - 慡梫慺偑儊儌儕忋偱楢懕
*
* 傪枮偨偡夝偲偟偰 CBufFlat 傪慖戰偟偨丅
*
* @note 傕偭偲忋埵憌偺 RArray<T> 傪巊偄偨偐偭偨偑丄妋曐嵪傒偺暔棟僒僀僘傪塀暳偟偰偄傞偺偱抐擮偟偨丅
* ReserveL(), Capacity() const 偼棊偲偣側偄丅
*/
CBufFlat* iBuffer;
}; // end of class RSmbMusicAPLibVector
/** @relates RSmbMusicAPLibVector
* 摦揑攝楍僐儞僥僫偺岎姺丅
*
* @param[out] aLhs 嵍曈抣丅
* @param[out] aRhs 塃曈抣丅
* @see RSmbMusicAPLibVector::Swap()
*/
template<typename T, class DP>
void Swap( RSmbMusicAPLibVector<T, DP>& aLhs, const RSmbMusicAPLibVector<T, DP>& aRhs );
/**
* 僐儞僥僫偵僥儞僾儗乕僩堷悢偲偟偰梌偊傞偙偲偑偱偒傞攋婞億儕僔乕丅
*
* 壗傕偟側偄丅僐儞僥僫偺僨僼僅儖僩梡丅
*/
struct TSmbMusicAPLib_NotDelete
{
template<class T>
static void Destroy( T& ) {}
}; // end of struct TSmbMusicAPLib_NotDelete
/**
* 僐儞僥僫偵僥儞僾儗乕僩堷悢偲偟偰梌偊傞偙偲偑偱偒傞攋婞億儕僔乕丅
*
* 懳徾偑 Heap object 偱偁傞偲偺慜採偱丄delete 墘嶼巕傪揔梡偡傞丅
*/
struct TSmbMusicAPLib_Delete
{
template<class T>
static void Destroy( T& aObj )
{
delete aObj;
}
}; // end of struct TSmbMusicAPLib_Delete
MUSICAPLIB_NAMESPACE_END
SEMCJ_NAMESPACE_END
#include "RSmbMusicAPLibVector.inl"
/** @page Usage_RSmbMusicAPLibVector 摦揑攝楍僐儞僥僫 RSmbMusicAPLibVector 偺棙梡曽朄
* 摦揑攝楍僐儞僥僫 RSmbMusicAPLibVector 偺棙梡曽朄傪丄僒儞僾儖僐乕僪傪梡偄偰帵偡丅
*
* - 梊旛抦幆
* -# API愝寁偺儌僨儖偼STL(C++ Standard Template Library)偺 std::vector 偱偁傞丅
* 偨偩偟丄儊僜僢僪柤偼 SymbianOS 偺僐乕僨傿儞僌婯懃丒姷椺偵崌傢偣偨傕偺偲偟偰偄傞(傾儖僼傽儀僢僩戝暥帤偱巒傔傞丄L convention 摍)丅
* -# SymbianOS 屌桳偺巇條丒惂栺偵崌傢偣偰丄婔偽偔偐偺撈帺婡擻傪晅壛偟偰偄傞丅
* - 儊儌儕儕乕僋懳嶔 - SymbianOS 摿桳偺 'leave 傊偺旛偊'
* - 杮僋儔僗偵尷偭偨偙偲偱偼側偄偑丄SymbianOS 偵偍偄偰偼丄摦揑儊儌儕儕僜乕僗(Heap)傪巊偆僆僽僕僃僋僩傪埖偆応崌丄
* 'leave 偵旛偊傞' 偺堄幆丒懳嶔僐乕僪偑昁恵偱偁傞丅偙傟偼丄C++昗弨巇條偺 exception 傪僒億乕僩奜偲偟丄
* 撈帺偺 CleanupStack + leave 偺儊僇僯僘儉傪嵦偭偨摨OS偱偼丄偄偨偟偐偨偺側偄偙偲丅
* -# 僀儞僗僞儞僗曄悢偲偟偰梡偄傞応崌丅
* @code
* class CFoo : public CBase
* {
* public:
* static CFoo* NewLC();
* void ConstructL();
* ~CFoo();
* void DoSomethingL();
* ...
* private:
* CFoo();
* ...
* private:
* typedef RSmbMusicAPLibVector<CBar*> TBarVec; // CBar傊偺娭楢[1..*]偺幚憰宆
* TBarVec iBars; // CBar傊偺娭楢[1..*]
* };
* ...
* CFoo* CFoo::NewLC()
* {
* CFoo* me = new(ELeave) CFoo();
* CleanupStack::PushL( me );
* me->ConstructL();
* return me;
* }
* CFoo::CFoo()
* : iBars() // 僨僼僅儖僩僐儞僗僩儔僋僞偼 leave 偟側偄丅
* {
* }
* void CFoo::ConstructL()
* {
* ... iBars 偺弶婜壔 ... // leave偑敪惗偟偆傞弶婜壔偼 2nd phase 僐儞僗僩儔僋僞偱丅
* }
* CFoo::~CFoo()
* {
* iBars.Release(); // R* 僋儔僗偺偍栺懇丅
* }
* void CFoo::DoSomethingL()
* {
* ... iBars 傪巊偭偰壗偐偡傞 ... // C* 僋儔僗偼僨僗僩儔僋僞傪偁偰偵偱偒傞偐傜丄iBars 偺屄乆偺売強偛偲偺摿壔儕乕僋懳嶔偼尨懃晄梫丅
* }
* @endcode
* -# 僗僞僢僋僆僽僕僃僋僩(auto曄悢)偲偟偰梡偄傞応崌丅
* @code
* void CFoo::DoSomethingL()
* {
* typedef RSmbMusicAPLibVector<TInt> T; // 惍悢偺摦揑攝楍傪偙偙偱巊偄偨偄偺丅
* T nums; // 僨僼僅儖僩僐儞僗僩儔僋僞偼 leave 偟側偄丅
* CleanupReleasePushL( nums ); // leave敪惗偵旛偊傞丅
* ... nums 傪巊偭偰壗偐偡傞 ...
* CleanupStack::PopAndDestroy( &nums ); // T::Release() 偑屇傃弌偝傟傞丅
* }
* @endcode
* - 僒儞僾儖僐乕僪
* @code
* #include "RSmbMusicAPLibVector.h"
* #include "SmbMusicAPLibAlgorithm.h" // for Find()
* USING_NAMESPACE_MM
*
* // C++ template 巊梡僐儞僥僫偺幚宆柤偼昁慠揑偵挿偨傜偟偔側傞丅
* // 僜乕僗僐乕僪偺壜撉惈丒曐庣惈傪岦忋偝偣傞偨傔偵偼丄typedef 傪梡偄偰丄儐僯乕僋僗僐乕僾撪偱揔愗偵娙堈側暿柤傪晅偗偰偍偔偲傛偄丅
* typedef RSmbMusicAPLibVector<TInt> T;
*
* #include <e32base.h> // for Console::NewL()
* #include <e32cons.h> // for class CConsoleBase
*
* LOCAL_D CConsoleBase* theConsole;
*
* LOCAL_D void Print( const T& aContainer, const TDesC& aTitle=KNullDesC )
* {
* // aContainer 偺慡梫慺傪報帤偡傞丅
* // 仸STL僀僥儗乕僞峔暥傪梡偄偨揟宆椺偺僒儞僾儖傪寭偹傞丅
* if (aTitle.Length() > 0)
* theConsole->Printf( _L("%S"), &aTitle );
* theConsole->Printf( _L("[") );
* T::const_iterator end = aContainer.End();
* for (T::const_iterator i = aContainer.Begin(); i != end; ++i)
* theConsole->Printf( _L(" %d"), *i );
* theConsole->Printf( _L(" ]\n") );
* }
*
* LOCAL_D void DoSampleL()
* {
* // TInt 傪梫慺宆偲偡傞儀僋僩儖傪嶌惉偡傞丅
* T v;
* CleanupReleasePushL( v );
*
* // 弶婜抣傪擖傟傞丅
* for (TInt i = 1; i < 5; ++i)
* v.Push_backL( i * 10 );
* Print( v );
*
* // 慻傒崬傒偺攝楍偲摨偠峔暥偱慡梫慺傪嶲徠偡傞椺丅
* // 仸STL僀僥儗乕僞峔暥傪梡偄傞曽偑晛捠丅僀僥儗乕僞宆傾僋僙僗偺椺偼 Print() 偵彂偄偨丅
* for (TUint i = 0; i < v.Size(); ++i)
* {
* TInt num = v[i];
* __ASSERT_DEBUG( num == (i + 1) * 10, User::Panic( MYDLL_UID3, KErrArgument ) );
* }
*
* // 愭摢偵梫慺 5 傪憓擖偟偰傒傞丅
* v.InsertL( v.Begin(), 5 );
* Print( v );
* // 愭摢偵暋悢偺梫慺 1, 2, 3, 4 傪堦搙偱憓擖偟偰傒傞丅
* const TInt n[] = { 1, 2, 3, 4 };
* v.InsertL( v.Begin(), n, n+4 ); // 慻傒崬傒攝楍傕僀僥儗乕僞偲偟偰摟夁揑偵埖偊傞偺偑STL棳丅
* Print( v );
*
* // 梫慺 10 偺埵抲傪扵偡丅
* // 傾儖僑儕僘儉 Find() 傪巊偊偽娙扨丄帺椡儖乕僾傪彂偔昁梫偼側偄丅
* T::iterator i = Find( v.Begin(), v.End(), 10 );
* __ASSERT_DEBUG( i != v.End(), User::Panic( MYDLL_UID3, KErrArgument ) );
* theConsole->Printf( _L("10 found, index=%d.\n"), i - v.Begin() );
*
* // 尒偮偐偭偨梫慺 10 傪嶍彍偟偰傒傞丅
* i = v.Erase( i );
* Print( v );
*
* // i 偼(嶍彍偟偨10偺屻懕梫慺偱偁傞)20傪億僀儞僩偟偰偄傞丅
* // 20埲崀偵偁傞慡梫慺傪嶍彍偟偰傒傞丅
* v.Erase( i, v.End() );
* Print( v );
*
* // v 偺摨抣僐僺乕偑傎偟偄応崌丅
* T* v2 = v.CloneLC(); // CleanupStack::PushL() 嵪傒偱曉偟偰偔傟傞丅
*
* // 慡梫慺傪嶍彍偟偨偄側傜偙傟丅
* v.Clear();
*
* // v, v2 偺撪梕傪報帤偟偰傒傞丅
* Print( v , _L("v = ") );
* Print( *v2, _L("v2 = ") );
*
* theConsole->Getch(); // 報帤撪梕偑栚帇妋擣偱偒傞傛偆偵丄擖椡懸偪偱偄偭偨傫掆巭丅
*
* // 巊偄廔傢偭偨傜儕僜乕僗攋婞丅
* // Release() 偺屇傃弌偟偼丄CleanupStack 偺堿偵塀傟偰偄傞偩偗丅
* CleanupStack::PopAndDestroy( v2 ); // 僗僞僢僋愭摢偼偙傟偺偼偢丅
* CleanupStack::PopAndDestroy( &v ); // 師偼偙傟偑愊傑傟偰偄傞偼偢丅
* }
*
* LOCAL_C void MyMainL()
* {
* theConsole = Console::NewL( _L("TSample"), TSize(KConsFullScreen, KConsFullScreen) );
* CleanupStack::PushL(theConsole);
* DoSampleL();
* CleanupStack::PopAndDestroy(); // theConsole
* theConsole = NULL;
* }
*
* GLDEF_C TInt E32Main()
* {
* __UHEAP_MARK;
* CTrapCleanup* cleanup = CTrapCleanup::New();
* TRAPD(error, MyMainL());
* __ASSERT_ALWAYS(!error, User::Panic( MYDLL_UID3, KErrArgument ));
* delete cleanup;
* __UHEAP_MARKEND;
* return(KErrNone);
* }
* @endcode
* - 僒儞僾儖僐乕僪偺幚峴寢壥
* @code
* [ 10 20 30 40 ]
* [ 5 10 20 30 40 ]
* [ 1 2 3 4 5 10 20 30 40 ]
* 10 found, index=5
* [ 1 2 3 4 5 20 30 40 ]
* [ 1 2 3 4 5 ]
* v = [ ]
* v2 = [ 1 2 3 4 5 ]
* @endcode
*/
#endif // __RSMBMUSICAPLib_VECTOR_H__
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -