xref: /Universal-ctags/main/nestlevel.h (revision 2e3d0c314e7498083e1f0b52a426b201f083cbb4)
19ed22506SFrank Fesevur /*
29ed22506SFrank Fesevur *   Copyright (c) 1999-2002, Darren Hiebert
39ed22506SFrank Fesevur *   Copyright 2009-2011 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
49ed22506SFrank Fesevur *
59ed22506SFrank Fesevur *   This source code is released for free distribution under the terms of the
60ce38835Sviccuad *   GNU General Public License version 2 or (at your option) any later version.
79ed22506SFrank Fesevur *
89ed22506SFrank Fesevur *   Defines external interface to scope nesting levels for tags.
99ed22506SFrank Fesevur */
105474c2e5SMasatake YAMATO #ifndef CTAGS_MAIN_NESTLEVEL_H
115474c2e5SMasatake YAMATO #define CTAGS_MAIN_NESTLEVEL_H
129ed22506SFrank Fesevur 
139ed22506SFrank Fesevur /*
149ed22506SFrank Fesevur *   INCLUDE FILES
159ed22506SFrank Fesevur */
169ed22506SFrank Fesevur #include "general.h"  /* must always come first */
179ed22506SFrank Fesevur 
189ed22506SFrank Fesevur #include "vstring.h"
199ed22506SFrank Fesevur 
209ed22506SFrank Fesevur /*
219ed22506SFrank Fesevur *   DATA DECLARATIONS
229ed22506SFrank Fesevur */
23f64f1867SMasatake YAMATO typedef struct NestingLevel NestingLevel;
249ed22506SFrank Fesevur typedef struct NestingLevels NestingLevels;
259ed22506SFrank Fesevur 
269ed22506SFrank Fesevur struct NestingLevel
279ed22506SFrank Fesevur {
28885fbc2cSMasatake YAMATO 	int corkIndex;
29090afdd9SMasatake YAMATO 	char userData [];
309ed22506SFrank Fesevur };
319ed22506SFrank Fesevur 
329ed22506SFrank Fesevur struct NestingLevels
339ed22506SFrank Fesevur {
34090afdd9SMasatake YAMATO 	void *levels;
359ed22506SFrank Fesevur 	int n;					/* number of levels in use */
369ed22506SFrank Fesevur 	int allocated;
37090afdd9SMasatake YAMATO 	size_t userDataSize;
38*2e3d0c31SMasatake YAMATO 	/* The second argument is given via nestinglevelsPopFull
39*2e3d0c31SMasatake YAMATO 	 * or nestinglevelFreeFull */
40*2e3d0c31SMasatake YAMATO 	void (* deleteUserData) (NestingLevel *, void *);
419ed22506SFrank Fesevur };
429ed22506SFrank Fesevur 
439ed22506SFrank Fesevur /*
449ed22506SFrank Fesevur *   FUNCTION PROTOTYPES
459ed22506SFrank Fesevur */
46090afdd9SMasatake YAMATO extern NestingLevels *nestingLevelsNew(size_t userDataSize);
47526f5c1fSMasatake YAMATO extern NestingLevels *nestingLevelsNewFull(size_t userDataSize,
48*2e3d0c31SMasatake YAMATO 										   void (* deleteUserData)(NestingLevel *, void *));
49*2e3d0c31SMasatake YAMATO #define nestingLevelsFree(NLS) nestingLevelsFreeFull(NLS, NULL)
50*2e3d0c31SMasatake YAMATO extern void nestingLevelsFreeFull(NestingLevels *nls, void *ctxData);
51885fbc2cSMasatake YAMATO extern NestingLevel *nestingLevelsPush(NestingLevels *nls, int corkIndex);
52885fbc2cSMasatake YAMATO extern NestingLevel * nestingLevelsTruncate(NestingLevels *nls, int depth, int corkIndex);
53*2e3d0c31SMasatake YAMATO #define nestingLevelsPop(NLS) nestingLevelsPopFull(NLS, NULL)
54*2e3d0c31SMasatake YAMATO extern void nestingLevelsPopFull(NestingLevels *nls, void *ctxData);
550f753a22SMasatake YAMATO #define nestingLevelsGetCurrent(NLS) nestingLevelsGetNthParent((NLS), 0)
560f753a22SMasatake YAMATO extern NestingLevel *nestingLevelsGetNthFromRoot(const NestingLevels *nls, int n);
570f753a22SMasatake YAMATO extern NestingLevel *nestingLevelsGetNthParent(const NestingLevels *nls, int n);
58090afdd9SMasatake YAMATO 
59090afdd9SMasatake YAMATO extern void *nestingLevelGetUserData (const NestingLevel *nl);
609ed22506SFrank Fesevur 
615474c2e5SMasatake YAMATO #endif  /* CTAGS_MAIN_NESTLEVEL_H */
62