--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/src/dlist.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:
+* Doubly linked list module.
+*
+*/
+
+
+/*
+ * dlist.c
+ *
+ *
+ *
+ * Project:
+ * Mobile Videophone Demonstrator
+ * H.263 Video Decoder
+ *
+ * Contains:
+ * This module contains generic list handling functions for doubly linked
+ * lists, i.e. one can use the same set of functions regardless of the type
+ * of list items.
+ * The list item type has a constraint that it must begin with the skeleton
+ * of a list item (see the definition of DLST_ITEM_SKELETON in dlist.h).
+ *
+ * The prefix ddlst is used in common names defined in this module.
+ *
+ *
+ *
+ */
+
+
+#include "dlist.h"
+
+
+#ifndef NULL
+ #define NULL 0
+#endif
+
+
+/*
+ * dlstClose
+ *
+ *
+ * Parameters:
+ * list a pointer to a list
+ *
+ * Function:
+ * This function deinitializes the given list. Notice that no dynamic
+ * allocation for the list is done. This function must be called when
+ * the list is no longer used.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstClose(dlst_t *list)
+{
+ list->head = list->tail = list->curr = NULL;
+ list->numItems = 0;
+
+ return 0;
+}
+
+
+/*
+ * dlstRemove
+ *
+ *
+ * Parameters:
+ * list a pointer to a list
+ * item used to return a pointer to the removed
+ * list item
+ *
+ * Function:
+ * This function removes an item from the list. Notice that no copying of
+ * contents of the given item is done, i.e. only the pointer to the item
+ * is used.
+ *
+ * If there are no items left in the list, NULL will be returned in
+ * the item parameter.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstRemove(dlst_t *list, void **item)
+{
+ if (list->curr) {
+ dlstListItem_t
+ *curr = list->curr,
+ *prev = (dlstListItem_t *) (list->curr->prev),
+ *next = (dlstListItem_t *) (list->curr->next);
+
+ *item = (void *) curr;
+
+ if (prev)
+ prev->next = curr->next;
+ else
+ list->head = (dlstListItem_t *) curr->next;
+
+ if (next)
+ next->prev = curr->prev;
+
+ curr->next = NULL;
+ curr->prev = NULL;
+
+ if (curr == list->tail) {
+ list->tail = prev;
+ list->curr = prev;
+ }
+ else
+ list->curr = next;
+
+ list->numItems--;
+ }
+
+ else
+ *item = NULL;
+
+ return 0;
+}
+
+
+/*
+ * dlstOpen
+ *
+ *
+ * Parameters:
+ * list a pointer to a list
+ *
+ * Function:
+ * This function initializes the given list. Notice that no dynamic
+ * allocation for the list is done. This function must be called before
+ * the list is used.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstOpen(dlst_t *list)
+{
+ list->head = list->tail = list->curr = NULL;
+ list->numItems = 0;
+
+ return 0;
+}
+
+
+/*
+ * dlstHead
+ *
+ *
+ * Parameters:
+ * list a pointer to a dlst list
+ * item used to return a pointer to the head item
+ * of the list
+ *
+ * Function:
+ * This function sets the current access point to the head of the list and
+ * returns a pointer to the head item. Notice that no copying of
+ * contents of the given item is done, i.e. only the pointer to the item
+ * is used.
+ *
+ * If there are no items left in the list, NULL will be returned in
+ * the item parameter.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstHead(dlst_t *list, void **item)
+{
+ if (list->head)
+ *item = (void *) list->head;
+
+ else
+ *item = NULL;
+
+ list->curr = list->head;
+
+ return 0;
+}
+
+
+/*
+ * dlstTail
+ *
+ *
+ * Parameters:
+ * list a pointer to a dlst list
+ *
+ * Function:
+ * This function sets the current access point to the tail of the list
+ * enabling the item addition to the end of the list.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstTail(dlst_t *list, void **item)
+{
+
+ if (list->tail)
+ *item = (void *) list->tail;
+
+ else
+ *item = NULL;
+
+ list->curr = list->tail;
+
+ return 0;
+}
+
+
+/*
+ * dlstNext
+ *
+ *
+ * Parameters:
+ * list a pointer to a dlst list
+ * item used to return a pointer to the next item
+ * of the list
+ *
+ * Function:
+ * This function sets the current access point to the next item of the list
+ * and returns a pointer to the item. Notice that no copying of
+ * contents of the given item is done, i.e. only the pointer to the item
+ * is used.
+ *
+ * If there are no items left in the list, NULL will be returned in
+ * the item parameter and the current access point shall be left as it is.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstNext(dlst_t *list, void **item)
+{
+ if (list->curr && list->curr->next) {
+ list->curr = (dlstListItem_t *) (list->curr->next);
+ *item = (void *) list->curr;
+ }
+
+ else
+ *item = NULL;
+
+ return 0;
+}
+
+
+int dlstPrev(dlst_t *list, void **item)
+{
+ if (list->curr && list->curr->prev) {
+ list->curr = (dlstListItem_t *) (list->curr->prev);
+ *item = (void *) list->curr;
+ }
+
+ else
+ *item = NULL;
+
+ return 0;
+}
+
+
+int dlstCurr(dlst_t *list, void **item)
+{
+ *item = (void *) list->curr;
+
+ return 0;
+}
+
+
+int dlstNextExists(dlst_t *list)
+{
+ return (list->curr && list->curr->next) ? 1 : 0;
+}
+
+/*
+ * dlstAdd
+ *
+ *
+ * Parameters:
+ * list a pointer to a dlst list
+ * item an item to add to the list
+ *
+ * Function:
+ * This function adds an item into the list. Notice that no copying of
+ * contents of the given item is done, i.e. only the pointer to the item
+ * is used.
+ *
+ * Returns:
+ * >= 0 if the function was successful
+ * < 0 indicating an error
+ *
+ */
+
+int dlstAddBeforeCurr(dlst_t *list, void *item)
+{
+ dlstListItem_t
+ *curr, *prev, *listItem = (dlstListItem_t *) item;
+
+ if (list->curr) {
+ curr = (dlstListItem_t *) list->curr,
+ prev = (dlstListItem_t *) list->curr->prev;
+
+ if (prev)
+ prev->next = item;
+ else
+ list->head = (dlstListItem_t *) item;
+ listItem->prev = prev;
+
+ curr->prev = item;
+ listItem->next = curr;
+
+ list->curr = (dlstListItem_t *) item;
+ }
+
+ else {
+ list->head = list->tail = list->curr = (dlstListItem_t *) item;
+ listItem->next = NULL;
+ listItem->prev = NULL;
+ }
+
+ list->numItems++;
+
+ return 0;
+}
+
+int dlstAddAfterCurr(dlst_t *list, void *item)
+{
+ dlstListItem_t
+ *curr, *next, *listItem = (dlstListItem_t *) item;
+
+ if (list->curr) {
+ curr = list->curr,
+ next = (dlstListItem_t *) (list->curr->next);
+
+ curr->next = item;
+ listItem->prev = curr;
+
+ if (next)
+ next->prev = item;
+ else
+ list->tail = (dlstListItem_t *) item;
+ listItem->next = next;
+
+ list->curr = (dlstListItem_t *) item;
+ }
+
+ else {
+ list->head = list->tail = list->curr = (dlstListItem_t *) item;
+ listItem->next = NULL;
+ listItem->prev = NULL;
+ }
+
+ list->numItems++;
+
+ return 0;
+}
+// End of File