--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/ipsec/ipsec6/src/circular.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,121 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// circular.cpp - Basic circluar list for IPSEC
+// @internalComponent for IPSEC
+//
+
+#include "circular.h"
+
+RCircularList::RCircularList()
+ /**
+ * Constructor.
+ *
+ * Ensure that the element is always a member of list,
+ * and link to self.
+ */
+ {
+ iPrev = this;
+ iNext = this;
+ }
+
+RCircularList::~RCircularList()
+ /**
+ * Destructor.
+ *
+ * Implicit detach.
+ */
+ {
+ Detach();
+ }
+
+RCircularList::RCircularList(RCircularList &aList)
+ /**
+ * Constructor.
+ *
+ * Construct a circular list that includes this element
+ * and all elements, except the "head", from another
+ * circular list.
+ *
+ * @param aList The head of the other list.
+ */
+ {
+ if (aList.iNext == &aList)
+ {
+ // The aList only contains self, nothing to steal.
+ iPrev = this;
+ iNext = this;
+ }
+ else
+ {
+ // Steal the list from aList (except aList self)
+ iPrev = aList.iPrev;
+ iNext = aList.iNext;
+ iNext->iPrev = this;
+ iPrev->iNext = this;
+
+ // Leave the aList alone in its own list.
+ aList.iNext = &aList;
+ aList.iPrev = &aList;
+ }
+ }
+
+
+void RCircularList::Attach(RCircularList &aList)
+ /**
+ * Move an element from another list to this list.
+ *
+ * Place the new element after this.
+ *
+ * @param aList The element to move
+ */
+ {
+ aList.Detach();
+ aList.iPrev = this;
+ aList.iNext = iNext;
+ iNext->iPrev = &aList;
+ iNext = &aList;
+ }
+
+void RCircularList::Detach()
+ /**
+ * Remove this from whatever list it is.
+ *
+ * This element will be alone in it's own circular list.
+ */
+ {
+ // Remove element from the old list
+ iPrev->iNext = iNext;
+ iNext->iPrev = iPrev;
+ // Link to self
+ iNext = this;
+ iPrev = this;
+ }
+
+
+
+RCircularList* TCircularListIter::operator++(TInt)
+ /**
+ * Return the next element in the list or NULL.
+ *
+ * @return The next element or NULL.
+ */
+ {
+ RCircularList *ptr = iNext;
+ if (ptr == &iMark)
+ return NULL;
+
+ iNext = ptr->iNext;
+ return ptr;
+ }
+