#include "list.h" #include #include /* * list operations for zhull * * Copyright (c) 2012, Franz Zotter, * with friendly help from * IOhannes zmoelnig * for variable entry types * in entry.h * IEM, Graz, Austria * * */ // memory things: list_t emptyList(void) { list_t generated_list; generated_list.length=0; generated_list.entries=0; return generated_list; } list_t allocateList(const size_t length) { list_t generated_list = emptyList(); if (length>0) { generated_list.entries= (entry_t*) malloc(length*sizeof(entry_t)); if (generated_list.entries!=0) { generated_list.length=length; } } return generated_list; } void reallocateList(list_t *list, const size_t length) { entry_t *old_entries = list->entries; if (length>0) { if (getLength(*list)==0) *list = allocateList(length); else { if (list->length != length) list->entries = (entry_t*) realloc(list->entries,length*sizeof(entry_t)); if (list->entries!=0) list->length=length; else *list=emptyList(); } } else freeList(list); } void freeList(list_t *list) { if (list->entries!=0) { free(list->entries); } list->entries=0; list->length=0; } // programming interface: size_t getLength(const list_t list) { return list.length; } entry_t getEntry(const list_t list, const index_t index) { if ((index>=0)&&(index=0)&&(index=start) { length=(size_t) (stop-start+1); incr=1; } else { length=(size_t) (start-stop+1); incr=-1; } list_t l = allocateList(length); if (getLength(l)!=0) { for (i=0,c=start; i=getLength(list1)) { for (i=0; i0)&&(stop>0)&&(startstop) { incr=-1; new_list=allocateList(start-stop+1); } else { incr=1; new_list=allocateList(start-stop+1); } for (j=start,i=0; ii) { setEntry(*list,i,entry); } } void removeIndexFromList(list_t *list, const index_t index) { index_t i,j; for (i=j=0; i0) for (i=0, j=getLength(*list)-1; ientries[j]; entry_t e2=list->entries[i]; if(entry_equals(&e1, &e2)) break; } if (i==k) { list->entries[i++]=list->entries[j]; k++; } } reallocateList(list, k); } list_t findValueListInList(const list_t value_list, const list_t list) { list_t l=emptyList(); index_t i,j; for (i=0; i0) { print_entry(getEntry(list,0)); } for (i=1; i