This is fifolist.c in view mode; [Download] [Up]
//------------------------------------------------------------------------ // ^FILE: fifolist.c - implementation of FIFO linked lists // // ^DESCRIPTION: // This file implements the classes declared in fifolist.h // // ^HISTORY: // 03/21/92 Brad Appleton <brad@ssd.csd.harris.com> Created //-^^--------------------------------------------------------------------- #include <stdlib.h> #include "cmdline.h" #include "fifolist.h" #ifndef NULL # define NULL 0L #endif //------------------------------------------------------------- GenericFifoList // Destructor GenericFifoList::~GenericFifoList(void) { GenericFifoListNode * nd = head; head = NULL; while (nd) { GenericFifoListNode * to_delete = nd; nd = nd->next; if (del_items) delete to_delete->contents; delete to_delete; } } // Add an item to the end void GenericFifoList::add(void * item) { if (item) { GenericFifoListNode * nd = new GenericFifoListNode(NULL, item); if (head == NULL) { head = tail = nd; } else { tail->next = nd; tail = nd; } ++num_items; mod = 1; } } // Remove an item off the front void * GenericFifoList::remove(void) { if (head == NULL) return NULL; GenericFifoListNode * nd = head; void * result = head->contents; head = head->next; delete nd; --num_items; mod = 1; return result; } //--------------------------------------------------------- GenericFifoListIter GenericFifoListIter::~GenericFifoListIter(void) {} void * GenericFifoListIter::operator()(void) { void * result = NULL; if (current) { result = current->contents; current = current->next; } return result; } //-------------------------------------------------------- GenericFifoListArray GenericFifoListArray::~GenericFifoListArray(void) {} void * GenericFifoListArray::operator[](unsigned ndx) { unsigned max_index = count(); if (! max_index--) return NULL; // check for underflow if (ndx > max_index) return NULL; // check for overflow // if we want the first element -- just return the head if (ndx == 0) return list.head->contents; // if we want the last element -- just return the tail if (ndx == max_index) return list.tail->contents; // If we are going backward or stuff has been modified, then rewind if ((ndx < index) || list.modified()) { index = 0; current = list.head; } // Skip from current to the desired element while (index < ndx) { current = current->next; ++index; } return current->contents; } //-------------------------------------------------------------------- FifoList #ifdef TEMPLATES // Destructor template <class Type> FifoList<Type>::~FifoList(void) { GenericFifoListNode * nd = head; head = NULL; while (nd) { GenericFifoListNode * to_delete = nd; nd = nd->next; if (del_items) delete (Type *)to_delete->contents; delete to_delete; } } template <class Type> FifoListIter<Type>::~FifoListIter(void) {} template <class Type> FifoListArray<Type>::~FifoListArray(void) {} #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.