本文整理汇总了C++中CArrayFixFlat::ResizeL方法的典型用法代码示例。如果您正苦于以下问题:C++ CArrayFixFlat::ResizeL方法的具体用法?C++ CArrayFixFlat::ResizeL怎么用?C++ CArrayFixFlat::ResizeL使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CArrayFixFlat
的用法示例。
在下文中一共展示了CArrayFixFlat::ResizeL方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FixupL
/**
This method should only be used by CImapAtomParser.
During parsing, a ReAllocL() may be required on the heap buffer that this atom and its
descendants' string data descriptor points at.
This happens when the heap buffer needs to be expanded.
If this causes the heap buffer's address to change, then this atom and its descendants'
pointer descriptors need updating.
@param The address of the new heap buffer
@param The address of the data within the heap buffer before the ReAllocL took place.
*/
void CImapAtom::FixupL(const HBufC8 *aNewBuffer, const TText8 *aOldBuffer)
{
// Fixup descriptor pointers
CArrayFixFlat<CImapAtom*>* atomStack = new (ELeave) CArrayFixFlat<CImapAtom*>(10);
CleanupStack::PushL(atomStack);
atomStack->AppendL(this);
CImapAtom* currentAtom;
while (atomStack->Count() != 0)
{
// Pop the top atom off of the stack
currentAtom = (*atomStack)[atomStack->Count() - 1];
atomStack->ResizeL(atomStack->Count() - 1);
// Fix up the current atom
if (currentAtom->iAtom.Length()>0)
{
// Find offset from start of old buffer
TInt start=(currentAtom->iAtom.Ptr()-aOldBuffer);
// Make new descriptor & assign it
TPtrC8 bufptr(aNewBuffer->Ptr()+start,currentAtom->iAtom.Length());
currentAtom->iAtom.Set(bufptr); // Note that we are setting the real iAtom not the copy returned by Atom()
}
// Add the first sibling to the stack,
// subsequent siblings are added when this sibling is visited
CImapAtom* siblingAtom = currentAtom->Next();
if (siblingAtom)
{
atomStack->AppendL(siblingAtom);
}
// Add child to the stack
CImapAtom* childAtom = currentAtom->Child();
if (childAtom)
{
atomStack->AppendL(childAtom);
}
}
CleanupStack::PopAndDestroy(atomStack);
}
示例2: if
CArrayFixFlat<struct sadb_alg> *CIpsecCryptoManager::SupportedAlgorithms
(TInt &aNumAuth, TInt &aNumEncrypt)
/**
* Ask the supported algorithms of a library.
*
* This function has a very specialized use: return supported
* algorithms, when a PFKEY reply to the REGISTER message is generated
* (CProtocolKey::ExecRegister). The format of the return value is tailored
* for that purpose.
*
* Return a dynamically alloated (heap) array of 'sadb_alg'
* descriptions. The first aNumAuth descriptors are authentication
* algorithms, and the tail aNumEncrypt are encryption
* algorithms.
*
* @retval aNumAuth Count of authentication algorithms
* @retval aNumEncrypt Count of cipher algorithms
* return Algorithm descriptions
*
* The return is guaranteed to be non-NULL, if aNumAuth + aNumEncrypt > 0.
*/
{
CArrayFixFlat<struct sadb_alg> *algs;
TInt n;
aNumAuth = 0;
aNumEncrypt = 0;
if (iAlgorithmList == NULL ||
iLibraryList == NULL ||
(n = iAlgorithmList->Count()) == 0)
return NULL; // No algorithms supported!
//
// Allocate all the space that is needed
//
// Sets 'aNumEncrypt' in case the heap allocations
// fail (a NULL return with non-zero count is used
// to indicate Memory Allocation error).
aNumEncrypt = n;
algs = new CArrayFixFlat<struct sadb_alg>(n);
if (!algs)
return NULL;
TRAPD(left, algs->ResizeL(n));
if (left)
{
delete algs;
return NULL;
}
aNumEncrypt = 0;
//
// -- All requred heap space has now been allocated --
// (The space is contigous in memory)
struct sadb_alg *auth = algs->Back(0);
struct sadb_alg *encrypt = algs->End(0);
for (TInt i = 0; i < n; ++i)
{
struct sadb_alg *alg;
TAlgorithmMap &p = iAlgorithmList->At(i);
if (p.iAlgorithm.Length() == 0 && p.iClass == EAlgorithmClass_Cipher )
{
// The NULL encryption is indicated by empty string in the
// algorithm name. NULL encryption is supported, if the
// mapping has such entry configured...
alg = encrypt - ++aNumEncrypt;
alg->sadb_alg_id = (TUint8)p.iId;
alg->sadb_alg_ivlen = 0;
alg->sadb_alg_minbits = 0;
alg->sadb_alg_maxbits = 0;
alg->sadb_alg_reserved = 0;
continue;
}
TLibraryPtr *lib;
TInt j = iLibraryList->Lookup(p, &lib);
if (lib != NULL)
{
// A matching library instance and algorithm
// located, fill in the algorithm description.
if (p.iClass == EAlgorithmClass_Digest)
{
alg = auth + aNumAuth++;
alg->sadb_alg_ivlen = 0;
}
else if (p.iClass == EAlgorithmClass_Cipher)
{
alg = encrypt - ++aNumEncrypt;
alg->sadb_alg_ivlen = (TUint8)lib->iAlgs[j].iVector;
}
#ifdef SYMBIAN_IPSEC_VOIP_SUPPORT
else if (p.iClass == EAlgorithmClass_Mac )
{
alg = auth + aNumAuth++;
alg->sadb_alg_ivlen = 0;
}
#endif //SYMBIAN_IPSEC_VOIP_SUPPORT
else
continue; // Some unknown algorithm class, that
// cannot be used by this implementation.
alg->sadb_alg_id = (TUint8)p.iId;
alg->sadb_alg_minbits = (TUint16)lib->iAlgs[j].iMinBits;
//.........这里部分代码省略.........