videoeditorengine/h263decoder/src/list.cpp
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/src/list.cpp	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,627 @@
+/*
+* 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:  
+* List handling functions.
+*
+*/
+
+
+
+#include "h263dconfig.h"
+#include "list.h"
+
+#ifndef NULL
+   #define NULL 0
+#endif
+
+
+/*
+ * fifoClose
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a FIFO list
+ *
+ * Function:
+ *    This function deinitializes the given FIFO 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 fifoClose(fifo_t *list)
+{
+   list->head = list->tail = NULL;
+   list->numItems = 0;
+
+   return 0;
+}
+
+
+/*
+ * fifoGet
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a FIFO 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 fifoGet(fifo_t *list, void **item)
+{
+   if (list->head) {
+      *item = (void *) list->head;
+      list->head = (lstListItem_t *) list->head->next;
+      if (list->head == NULL)
+         list->tail = NULL;
+      list->numItems--;
+   }
+
+   else
+      *item = NULL;
+
+   return 0;
+}
+
+
+/*
+ * fifoOpen
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a FIFO list
+ *
+ * Function:
+ *    This function initializes the given FIFO 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 fifoOpen(fifo_t *list)
+{
+   list->head = list->tail = NULL;
+   list->numItems = 0;
+
+   return 0;
+}
+
+
+/*
+ * fifoPeek
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a FIFO list
+ *    item                       used to return a pointer to the removed
+ *                               list item
+ *
+ * Function:
+ *    This function returns a pointer to the next in the list but does not
+ *    remove the 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 fifoPeek(fifo_t *list, void **item)
+{
+   if (list->head)
+      *item = (void *) list->head;
+
+   else
+      *item = NULL;
+
+   return 0;
+}
+
+
+/*
+ * fifoPut
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a FIFO 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 fifoPut(fifo_t *list, void *item)
+{
+   ((lstListItem_t *) item)->next = NULL;
+
+   if (list->tail) {
+      list->tail->next = item;
+      list->tail = (lstListItem_t *) (item);
+   }
+
+   else
+      list->head = list->tail = (lstListItem_t *) item;
+
+   list->numItems++;
+
+   return 0;
+}
+
+
+/*
+ * lifoClose
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a LIFO list
+ *
+ * Function:
+ *    This function deinitializes the given LIFO 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 lifoClose(lifo_t *list)
+{
+   list->head = NULL;
+
+   return 0;
+}
+
+
+/*
+ * lifoGet
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a LIFO 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 lifoGet(lifo_t *list, void **item)
+{
+   if (list->head) {
+      *item = list->head;
+      list->head = (lstListItem_t *) list->head->next;
+   }
+   else
+      *item = NULL;
+
+   return 0;
+}
+
+
+/*
+ * lifoOpen
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a LIFO list
+ *
+ * Function:
+ *    This function initializes the given LIFO 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 lifoOpen(lifo_t *list)
+{
+   list->head = NULL;
+
+   return 0;
+}
+
+
+/*
+ * lifoPut
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a LIFO 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 lifoPut(lifo_t *list, void *item)
+{
+   ((lstListItem_t *) item)->next = list->head;
+   list->head = (lstListItem_t *) item;
+
+   return 0;
+}
+
+
+/*
+ * lstClose
+ *    
+ *
+ * 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 lstClose(lst_t *list)
+{
+   list->head = list->prev = list->curr = NULL;
+   list->numItems = 0;
+
+   return 0;
+}
+
+
+/*
+ * lstRemove
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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 lstRemove(lst_t *list, void **item)
+{
+   if (list->curr) {
+      *item = (void *) list->curr;
+      if (list->prev)
+         list->prev->next = list->curr->next;
+      else
+         list->head = (lstListItem_t *) (list->curr->next);
+      list->curr = (lstListItem_t *) (list->curr->next);
+      ((lstListItem_t *) *item)->next = NULL;
+      list->numItems--;
+   }
+
+   else
+      *item = NULL;
+
+   return 0;
+}
+
+
+/*
+ * lstOpen
+ *    
+ *
+ * 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 lstOpen(lst_t *list)
+{
+   list->head = list->prev = list->curr = NULL;
+   list->numItems = 0;
+
+   return 0;
+}
+
+
+/*
+ * lstHead
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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 lstHead(lst_t *list, void **item)
+{
+   if (list->head)
+      *item = (void *) list->head;
+
+   else
+      *item = NULL;
+
+   list->curr = list->head;
+   list->prev = NULL;
+
+   return 0;
+}
+
+
+/*
+ * lstEnd
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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 lstEnd(lst_t *list)
+{
+   while (list->curr) {
+      list->prev = list->curr;
+      list->curr = (lstListItem_t *) (list->curr->next);
+   }
+
+   return 0;
+}
+
+
+/*
+ * lstTail
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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 lstTail(lst_t *list, void **item)
+{
+   if (!list->curr) {
+      list->curr = list->head;
+      list->prev = NULL;
+   }
+
+   if (!list->curr) {
+      *item = NULL;
+      return 0;
+   }
+
+   while (list->curr->next) {
+      list->prev = list->curr;
+      list->curr = (lstListItem_t *) (list->curr->next);
+   }
+
+   *item = list->curr;
+   return 0;
+}
+
+
+/*
+ * lstCurr
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst list
+ *    item                       used to return a pointer to the current item
+ *                               of the list
+ *
+ * Function:
+ *    This returns a pointer to the current item of 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 lstCurr(lst_t *list, void **item)
+{
+   *item = list->curr;
+   return 0;
+}
+
+
+/*
+ * lstNext
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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.
+ *
+ * Returns:
+ *    >= 0 if the function was successful
+ *    < 0  indicating an error
+ *
+ */
+
+int lstNext(lst_t *list, void **item)
+{
+   if (list->curr) {
+      list->prev = list->curr;
+      list->curr = (lstListItem_t *) (list->curr->next);
+      *item = (void *) list->curr;
+   }
+
+   else
+      *item = NULL;
+
+   return 0;
+}
+
+
+int lstNextExists(lst_t *list)
+{
+   return (list->curr && list->curr->next) ? 1 : 0;
+}
+
+/*
+ * lstAdd
+ *    
+ *
+ * Parameters:
+ *    list                       a pointer to a lst 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 lstAdd(lst_t *list, void *item)
+{
+   ((lstListItem_t *) item)->next = list->curr;
+
+   if (list->prev)
+      list->prev->next = item;
+
+   else
+      list->head = (lstListItem_t *) item;
+
+   list->curr = (lstListItem_t *) item;
+
+   list->numItems++;
+
+   return 0;
+}
+
+
+// End of File