]> andersk Git - splint.git/blob - src/mtDefaultsDeclList.c
Merged code tree with Dave Evans's version. Many changes to numberous to list....
[splint.git] / src / mtDefaultsDeclList.c
1 /*
2 ** LCLint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2001 University of Virginia,
4 **         Massachusetts Institute of Technology
5 **
6 ** This program is free software; you can redistribute it and/or modify it
7 ** under the terms of the GNU General Public License as published by the
8 ** Free Software Foundation; either version 2 of the License, or (at your
9 ** option) any later version.
10 ** 
11 ** This program is distributed in the hope that it will be useful, but
12 ** WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ** General Public License for more details.
15 ** 
16 ** The GNU General Public License is available from http://www.gnu.org/ or
17 ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18 ** MA 02111-1307, USA.
19 **
20 ** For information on lclint: lclint-request@cs.virginia.edu
21 ** To report a bug: lclint-bug@cs.virginia.edu
22 ** For more information: http://lclint.cs.virginia.edu
23 */
24 /*
25 ** mtDefaultsDeclList.c
26 **
27 ** based on list_template.c
28 **
29 ** where T has T_equal (or change this) and T_unparse
30 */
31
32 # include "lclintMacros.nf"
33 # include "basic.h"
34 # include "mtgrammar.h"
35
36 mtDefaultsDeclList
37 mtDefaultsDeclList_new ()
38 {
39   return mtDefaultsDeclList_undefined;
40 }
41
42 static /*@notnull@*/ mtDefaultsDeclList
43 mtDefaultsDeclList_newEmpty (void)
44 {
45   mtDefaultsDeclList s = (mtDefaultsDeclList) dmalloc (sizeof (*s));
46   
47   s->nelements = 0;
48   s->nspace = mtDefaultsDeclListBASESIZE; 
49   s->elements = (mtDefaultsDecl *) dmalloc (sizeof (*s->elements) * mtDefaultsDeclListBASESIZE);
50
51   return (s);
52 }
53
54 static void
55 mtDefaultsDeclList_grow (/*@notnull@*/ mtDefaultsDeclList s)
56 {
57   int i;
58   mtDefaultsDecl *newelements;
59   
60   s->nspace += mtDefaultsDeclListBASESIZE;
61
62   newelements = (mtDefaultsDecl *) dmalloc (sizeof (*newelements) * (s->nelements + s->nspace));
63
64   if (newelements == (mtDefaultsDecl *) 0)
65     {
66       llfatalerror (cstring_makeLiteral ("mtDefaultsDeclList_grow: out of memory!"));
67     }
68
69   for (i = 0; i < s->nelements; i++)
70     {
71       newelements[i] = s->elements[i];
72     }
73   
74   sfree (s->elements); 
75   s->elements = newelements;
76 }
77
78 mtDefaultsDeclList mtDefaultsDeclList_single (/*@keep@*/ mtDefaultsDecl el) 
79 {
80   mtDefaultsDeclList s = mtDefaultsDeclList_new ();
81   s = mtDefaultsDeclList_add (s, el);
82   return s;
83 }
84
85 mtDefaultsDeclList mtDefaultsDeclList_add (mtDefaultsDeclList s, /*@keep@*/ mtDefaultsDecl el)
86 {
87   if (!mtDefaultsDeclList_isDefined (s))
88     {
89       s = mtDefaultsDeclList_newEmpty ();
90     }
91
92   if (s->nspace <= 0)
93     {
94       mtDefaultsDeclList_grow (s);
95     }
96   
97   s->nspace--;
98   /*@i32@*/ s->elements[s->nelements] = el;
99   s->nelements++;
100
101   /*@i32@*/ return s;
102 }
103
104 mtDefaultsDeclList mtDefaultsDeclList_prepend (mtDefaultsDeclList s, /*@keep@*/ mtDefaultsDecl el)
105 {
106   int i;
107
108   if (!mtDefaultsDeclList_isDefined (s))
109     {
110       /*@i32@*/ return mtDefaultsDeclList_single (el);
111     }
112
113   if (s->nspace <= 0)
114     {
115       mtDefaultsDeclList_grow (s);
116     }
117   
118   s->nspace--;
119
120   for (i = s->nelements; i > 0; i--) 
121     {
122       s->elements[i] = s->elements [i - 1];
123     }
124
125   /*@i32@*/ s->elements[0] = el;
126   s->nelements++;
127
128   /*@i32@*/ return s;
129 }
130
131 cstring
132 mtDefaultsDeclList_unparse (mtDefaultsDeclList s)
133 {
134   return mtDefaultsDeclList_unparseSep (s, cstring_makeLiteralTemp (" "));
135 }
136
137 cstring
138 mtDefaultsDeclList_unparseSep (mtDefaultsDeclList s, cstring sep)
139 {
140    cstring st = cstring_undefined;
141
142    if (mtDefaultsDeclList_isDefined (s))
143      {
144        int i;
145
146        for (i = 0; i < s->nelements; i++)
147          {
148            if (i == 0)
149              {
150                st = mtDefaultsDecl_unparse (s->elements[i]);
151              }
152            else
153              st = message ("%q%s%q", st, sep, mtDefaultsDecl_unparse (s->elements[i]));
154          }
155      }
156
157    return st;
158 }
159
160 void
161 mtDefaultsDeclList_free (mtDefaultsDeclList s)
162 {
163   if (mtDefaultsDeclList_isDefined (s))
164     {
165       int i;
166
167       for (i = 0; i < s->nelements; i++) {
168         mtDefaultsDecl_free (s->elements[i]);
169       }
170
171       sfree (s->elements);
172       sfree (s);
173     }
174 }
175
This page took 0.076773 seconds and 5 git commands to generate.