From 922cbf08eb28fc96873711f744e541d33de4744a Mon Sep 17 00:00:00 2001 From: uz Date: Sun, 18 Apr 2010 18:40:59 +0000 Subject: [PATCH] Added several functions to the intstack module. git-svn-id: svn://svn.cc65.org/cc65/trunk@4643 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/common/intstack.c | 25 +++++++++++++++++-------- src/common/intstack.h | 24 ++++++++++++++++++++---- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/common/intstack.c b/src/common/intstack.c index ecb43030a..f5518e337 100644 --- a/src/common/intstack.c +++ b/src/common/intstack.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ +/* (C) 2004-2010, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -48,7 +48,7 @@ long IS_Get (const IntStack* S) /* Get the value on top of an int stack */ { - CHECK (S->Count > 0); + PRECONDITION (S->Count > 0); return S->Stack[S->Count-1]; } @@ -57,7 +57,7 @@ long IS_Get (const IntStack* S) void IS_Set (IntStack* S, long Val) /* Set the value on top of an int stack */ { - CHECK (S->Count > 0); + PRECONDITION (S->Count > 0); S->Stack[S->Count-1] = Val; } @@ -66,7 +66,7 @@ void IS_Set (IntStack* S, long Val) void IS_Drop (IntStack* S) /* Drop a value from an int stack */ { - CHECK (S->Count > 1); + PRECONDITION (S->Count > 0); --S->Count; } @@ -75,9 +75,18 @@ void IS_Drop (IntStack* S) void IS_Push (IntStack* S, long Val) /* Push a value onto an int stack */ { - CHECK (S->Count < sizeof (S->Stack) / sizeof (S->Stack[0])); + PRECONDITION (S->Count < sizeof (S->Stack) / sizeof (S->Stack[0])); S->Stack[S->Count++] = Val; } +long IS_Pop (IntStack* S) +/* Pop a value from an int stack */ +{ + PRECONDITION (S->Count > 0); + return S->Stack[--S->Count]; +} + + + diff --git a/src/common/intstack.h b/src/common/intstack.h index a03be9b2c..f3fbf081b 100644 --- a/src/common/intstack.h +++ b/src/common/intstack.h @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ +/* (C) 2004-2010, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -54,6 +54,9 @@ struct IntStack { long Stack[8]; }; +/* An initializer for an empty int stack */ +#define STATIC_INTSTACK_INITIALIZER { 0, { 0, 0, 0, 0, 0, 0, 0, 0 } } + /* Declare an int stack with the given value as first element */ #define INTSTACK(Val) { 1, { Val, 0, 0, 0, 0, 0, 0, 0 } } @@ -75,6 +78,16 @@ INLINE int IS_IsFull (const IntStack* S) # define IS_IsFull(S) ((S)->Count >= sizeof ((S)->Stack) / sizeof ((S)->Stack[0])) #endif +#if defined(HAVE_INLINE) +INLINE int IS_IsEmpty (const IntStack* S) +/* Return true if there are no values on the given int stack */ +{ + return (S->Count == 0); +} +#else +# define IS_IsEmpty(S) ((S)->Count == 0) +#endif + #if defined(HAVE_INLINE) INLINE unsigned IS_GetCount (const IntStack* S) /* Return the number of elements on the given int stack */ @@ -97,6 +110,9 @@ void IS_Drop (IntStack* S); void IS_Push (IntStack* S, long Val); /* Push a value onto an int stack */ +long IS_Pop (IntStack* S); +/* Pop a value from an int stack */ + /* End of intstack.h */ -- 2.39.5