This is dlststack.c in view mode; [Download] [Up]
/* dlist v1.0.0 Dynamic list library * Copyright (c) 1994 Bill Bereza * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * To reach the author * * email: * berezaw@river.it.gvsu.edu ac368@leo.nmc.edu * * $Log: dlststack.c,v $ * Revision 1.3 94/12/19 21:17:33 berezaw * finished quick sort function * * Revision 1.2 94/12/18 01:30:11 berezaw * fixed a sizeof in a malloc call * * Revision 1.1 94/12/17 21:54:49 berezaw * Initial revision * * * $Header: /Users/berezaw/src/dlist/RCS/dlststack.c,v 1.3 94/12/19 21:17:33 berezaw Exp $ */ #include "dlststack.h" void *dpushel(DLSTSTACK *dstr, void *addel) { struct _del *newchar; if((!dstr) || (!dstackelsize(dstr))) return NULL; newchar=(struct _del *)malloc(sizeof(struct _del)); newchar->_element=malloc(dstackelsize(dstr)); if((!newchar) || (!newchar->_element)) return NULL; else { memcpy(newchar->_element, addel, dstackelsize(dstr)); newchar->_next=dstr->_first; newchar->_prev=NULL; if(dstr->_last==NULL) dstr->_last=newchar; else ((struct _del *)dstr->_first)->_prev=newchar; dstr->_first=newchar; dstr->_bytes+=dstackelsize(dstr); dstr->_elems++; return addel; } } void *dpushelv(DLSTSTACK *dstr, void *addel, size_t els) { struct _delv *newchar; size_t elsize=els ? els : dstackelsize(dstr); if((!dstr) || (!elsize)) return NULL; newchar=(struct _delv *)malloc(sizeof(struct _delv)); newchar->_element=malloc(els); newchar->_elvsize=els; if((!newchar) || (!newchar->_element)) return NULL; else { memcpy(newchar->_element, addel, els); newchar->_next=dstr->_first; newchar->_prev=NULL; if(dstr->_last==NULL) dstr->_last=newchar; else ((struct _delv *)dstr->_first)->_prev=newchar; dstr->_first=newchar; dstr->_bytes+=els; dstr->_elems++; return addel; } } void *dpopel(DLSTSTACK *dstr) { void *pchar; void *popel=NULL; if(dstr==NULL) return NULL; if(dstacksize(dstr)) { pchar=dstr->_first; dstr->_first=((struct _del *)pchar)->_next; popel=((struct _del *)pchar)->_element; free(pchar); dstr->_elems--; if(dstackelsize(dstr)) dstr->_bytes-=dstackelsize(dstr); else dstr->_bytes-=((struct _delv *)pchar)->_elvsize; } return popel; } void *dpopelv(DLSTSTACK *dstr, size_t *bs) { struct _delv *pchar; void *popel=NULL; if(dstr==NULL) return NULL; if(dstacksize(dstr)) { pchar=((struct _delv *)dstr->_first); *bs=pchar->_elvsize; dstr->_first=pchar->_next; popel=pchar->_element; free(pchar); dstr->_elems--; if(dstackelsize(dstr)) dstr->_bytes-=dstackelsize(dstr); else dstr->_bytes-=pchar->_elvsize; } return popel; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.