epoc32/include/crulemarkedstack.inl
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
williamr@2
    17
// note: MergeToMark is not atomic - a leave means that data has been removed
williamr@2
    18
template <TBool StackOwnsEntry>
williamr@2
    19
inline void CRuleMarkedStack<StackOwnsEntry>::MergeToMarkL(TInt aMarkType)
williamr@2
    20
	{
williamr@2
    21
	const TInt lastMark=this->RemoveMark(aMarkType);
williamr@2
    22
	if (this->Count()>lastMark)
williamr@2
    23
		{
williamr@2
    24
		CBNFNode* currentRule=this->Pop();
williamr@2
    25
		if (StackOwnsEntry)
williamr@2
    26
			CleanupStack::PushL(currentRule);
williamr@2
    27
			
williamr@2
    28
		while (this->Count()>lastMark)
williamr@2
    29
			{
williamr@2
    30
			CBNFNode* nextRule=this->Pop();
williamr@2
    31
			if (StackOwnsEntry)
williamr@2
    32
				CleanupStack::PushL(nextRule);
williamr@2
    33
			currentRule->ReparentL(nextRule);
williamr@2
    34
			if (StackOwnsEntry)
williamr@2
    35
				{
williamr@2
    36
				CleanupStack::Pop(2); // nextRule, currentRule
williamr@2
    37
				CleanupStack::PushL(nextRule); // nextRule
williamr@2
    38
				}
williamr@2
    39
			
williamr@2
    40
			currentRule=nextRule;
williamr@2
    41
			}
williamr@2
    42
williamr@2
    43
		if (StackOwnsEntry)
williamr@2
    44
			CleanupStack::Pop(); // currentRule
williamr@2
    45
		this->PushL(currentRule);
williamr@2
    46
		}
williamr@2
    47
	}