Merge branch 'master' of github.com:geany/geany
[geany-mirror.git] / tagmanager / nestlevel.c
blob8ec3b26d4e5bd12cb69d33474523f944bcf4a8c4
1 /*
2 * Copyright (c) 1999-2002, Darren Hiebert
3 * Copyright 2009-2011 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
5 * This source code is released for free distribution under the terms of the
6 * GNU General Public License.
8 * Defines external interface to scope nesting levels for tags.
9 */
12 * INCLUDE FILES
14 #include "general.h" /* must always come first */
16 #include "main.h"
17 #include "nestlevel.h"
20 * FUNCTION DEFINITIONS
23 extern NestingLevels *nestingLevelsNew(void)
25 NestingLevels *nls = xCalloc (1, NestingLevels);
26 return nls;
29 extern void nestingLevelsFree(NestingLevels *nls)
31 int i;
32 for (i = 0; i < nls->allocated; i++)
33 vStringDelete(nls->levels[i].name);
34 if (nls->levels) eFree(nls->levels);
35 eFree(nls);
38 extern void nestingLevelsPush(NestingLevels *nls,
39 const vString *name, int type)
41 NestingLevel *nl = NULL;
43 if (nls->n >= nls->allocated)
45 nls->allocated++;
46 nls->levels = xRealloc(nls->levels,
47 nls->allocated, NestingLevel);
48 nls->levels[nls->n].name = vStringNew();
50 nl = &nls->levels[nls->n];
51 nls->n++;
53 vStringCopy(nl->name, name);
54 nl->type = type;
57 extern void nestingLevelsPop(NestingLevels *nls)
59 const NestingLevel *nl = nestingLevelsGetCurrent(nls);
61 Assert (nl != NULL);
62 vStringClear(nl->name);
63 nls->n--;
66 extern NestingLevel *nestingLevelsGetCurrent(NestingLevels *nls)
68 Assert (nls != NULL);
70 if (nls->n < 1)
71 return NULL;
73 return &nls->levels[nls->n - 1];
76 /* vi:set tabstop=4 shiftwidth=4: */