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.