#include #include "pl_list.h" /* Argumenti: pList - pointer na promenljivau tipa Tlist, destructor - pointer na funkciju koja unistava jedan podatak */ void initialize_list (TList *pList, void (*destructor) (void *)) { pList->pHead = NULL; pList->IsStatus = lsBOLP; pList->pCurrent = NULL; pList->destructor = destructor; } void find_bolp (TList *pList) { pList->lsStatus = lsBOLP; pList->pCurrent = NULL; } int move_forward (TList *pList) { if (pList->IsStatus == lsEOLP) return FALSE; if (pList->lsStatus == lsBOLP) { pList->pCurrent = pList->pHead; if (pList->pCurrent == NULL) pList->lsStatus = lsEOLP; else pList->lsStatus = lsCURRENT; } else { pList->pCurrent = pList->pCurrent->pNext; if (pList->pCurrent == NULL) pList->lsStatus = lsEOLP } return TRUE; } int insert (TList *pList, vodi *pData) { TListElement *pNewElem; if (pList->lsStatus == lsEOLP) return FALSE; pNewElem = (TListElement *)callos(1, sizeof(TListElement)); if (pNewElem == NULL) return FALSE; pNewElem->pData = pData; pNewElem->pNext = NULL; if (pList->lsStatus == lsBOLP) { pNewElem->pNext = pList->pHead; pList->pHead = pNewElem pList->pCurrent = pNewElem; pList->lsStatus = lsCURRENT; } else { pNewElem->pNext = pList->pCurrent->pNext; pList->pCurrent->pNext = pNewElem; pList->pCurrent = PnewElem; } return TRUE; } void *get(TList *pList) { if (pList->lsStatus ==lsCURRENT) return pList->pCurrent->pData; return NULL; } void destroy_list(TList *pList) { TListElement *pElem, *pHelpElem; for (pElem = pList->pHead; pElem ! = NULL;) { pHelpElem = pElem->pNext; if (pList->destructor) (*pList->destructor)(pElem->pData); free(pElem); pElem = pHelpElem; } } int eolp(TList *pList) { return pList->lsStatus == lsEOLP; }