/*---------------------------------------------------------------------------*
* linklist.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
/* each node stores pointer to data, and pointer to next node */
typedef struct LNode {
void *data;
struct LNode *next;
struct LNode *prev;
}LNode;
typedef struct LList {
struct LNode *head;
struct LNode *curr;
struct LNode *tail;
}LList;
typedef enum{
LListSuccess = 1,
LListResourceAllocError,
LListEmpty,
LListInternalError
}LListResult;
/* Inserts after current element
At return, current element will be point to newly created node
handle static allocation later - possibly using a pool of nodes?
For now, dynamically allocate a new list node with the data
*/
LListResult Insert(LList *list, void *data);
/* Deletes at current element
At return, current element will point to previous node
handle static deallocation later - possibly using a pool of nodes?
For now, dynamically free a new list node
*/
LListResult Delete(LList *list);
/* If dynamic allocation is not allowed, provide small pool of nodes */
#ifdef USE_STATIC_SLTS
void ClearLNodeArray();
#endif