From 983c59ddf17ae95ed75120d2f8e0cc5b93e10a0b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Oct 2014 14:35:35 -0400 Subject: [PATCH] Added some linked-list interface methods for segments. Signed-off-by: unknown --- dynarrc/dynarrc.interface.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/dynarrc/dynarrc.interface.h b/dynarrc/dynarrc.interface.h index 6f4d954..7401a92 100644 --- a/dynarrc/dynarrc.interface.h +++ b/dynarrc/dynarrc.interface.h @@ -25,3 +25,39 @@ // segment at a particular index // use segNull() to check validity of the returned segment #define getSegAt(type, index) SEG_ARR_GET_SEG(type, index) + +//------- linked-list behavior ------ + +// returns the next segment +// use segNull() to check validity ofthe returned segment +#define getNextSeg(type, seg) SEG_ARR_GET_SEG(type, SEG_ARR_SEG_NEXT_INDEX(type, seg)) +// checks whether the next segment exists +#define hasNext(type, seg) ((seg).nextIndex != EMPTY_INDEX) +// sets the next segment +// this is a ``hard`` action, because it +// modifies the segment in the data structure +#define setNextSeg(type, seg, nextSeg) \ + ( seg.nextIndex = \ + (PTR_SEG_FROM_INDEX(type, (seg).index)->nextIndex) = \ + nextSeg.index) + +#define getSegData(seg) (\ + (seg).data = \ + (PTR_SEG_FROM_INDEX(type, (seg).index)->data)\ +) + +#define setSegData(type, seg, data) \ + ( (seg).data = \ + (PTR_SEG_FROM_INDEX(type, (seg).index)->data) = \ + (data)) +// marks the segment as NULL/empty +// this is a ``soft`` action, because it +// does not modify/delete the segment in the data structure +#define makeSegNull(seg) do{(seg).index = EMPTY_INDEX;}while(0) +// marks the segment as NULL/empty +// this is a ``hard`` action, because it +// modifies the segment in the data structure +#define makeNextNull(type, seg) do{\ + (seg).nextIndex = \ + PTR_SEG_FROM_INDEX(type, (seg).index)->nextIndex) = EMPTY_INDEX;\ +}while(0)