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