/*
-** LCLint - annotation-assisted static program checker
-** Copyright (C) 1994-2000 University of Virginia,
+** Splint - annotation-assisted static program checker
+** Copyright (C) 1994-2003 University of Virginia,
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA.
**
-** For information on lclint: lclint-request@cs.virginia.edu
-** To report a bug: lclint-bug@cs.virginia.edu
-** For more information: http://lclint.cs.virginia.edu
+** For information on splint: info@splint.org
+** To report a bug: splint-bug@splint.org
+** For more information: http://www.splint.org
*/
/*
** cstringList.c
** where T has T_equal (or change this) and T_unparse
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
cstringList
return (s);
}
+static /*@notnull@*/ cstringList
+cstringList_newPredict (int size)
+{
+ cstringList s = (cstringList) dmalloc (sizeof (*s));
+
+ s->nelements = 0;
+ s->nspace = size;
+ s->elements = (cstring *) dmalloc (sizeof (*s->elements) * size);
+
+ return (s);
+}
+
static void
cstringList_grow (/*@notnull@*/ cstringList s)
{
cstring *newelements;
s->nspace += cstringListBASESIZE;
-
+
newelements = (cstring *) dmalloc (sizeof (*newelements)
* (s->nelements + s->nspace));
-
+
if (newelements == (cstring *) 0)
{
return s;
}
+cstringList cstringList_prepend (cstringList s, /*@keep@*/ cstring el)
+{
+ int i;
+
+ DPRINTF (("Prepend: %s + %s",
+ cstringList_unparse (s), cstring_toCharsSafe (el)));
+
+ if (!cstringList_isDefined (s))
+ {
+ return cstringList_single (el);
+ }
+
+ if (s->nspace <= 0)
+ {
+ cstringList_grow (s);
+ }
+
+ s->nspace--;
+
+ for (i = s->nelements; i > 0; i--)
+ {
+ s->elements[i] = s->elements [i - 1];
+ }
+
+ s->elements[0] = el;
+ s->nelements++;
+
+ return s;
+}
+
cstring
cstringList_unparse (cstringList s)
{
}
void
-cstringList_printSpaced (cstringList s, int indent, int gap, int linelen)
+cstringList_printSpaced (cstringList s, size_t indent, size_t gap, int linelen)
{
if (cstringList_isDefined (s))
{
cstring istring = cstring_fill (cstring_undefined, indent);
cstring gstring = cstring_fill (cstring_undefined, gap);
int numcol;
- int longest = 0;
+ size_t longest = 0;
int i;
/*
for (i = 0; i < s->nelements; i++)
{
- int len = cstring_length (s->elements[i]);
+ size_t len = cstring_length (s->elements[i]);
if (len > longest)
{
}
}
- numcol = (linelen - indent) / (longest + gap);
+ numcol = size_toInt ((linelen - indent) / (longest + gap));
if (numcol <= 1)
{
{
if (cstringList_isDefined (s))
{
+ int i;
+
+ DPRINTF (("cstringList free: [%p] %s",
+ s, cstringList_unparse (s)));
+
+ /* evans 2002-07-12: this was missing, not detected because of reldef */
+ for (i = 0; i < s->nelements; i++)
+ {
+ cstring_free (s->elements[i]);
+ }
+
sfree (s->elements);
sfree (s);
}
}
}
+int cstringList_getIndex (cstringList s, cstring key)
+{
+ int index = 0;
+
+ cstringList_elements (s, el)
+ {
+ if (cstring_equal (el, key))
+ {
+ return index;
+ }
+
+ index++;
+ } end_cstringList_elements ;
+
+ BADBRANCHRET (0);
+}
+
+bool cstringList_contains (cstringList s, cstring key)
+{
+ int index = 0;
+
+ cstringList_elements (s, el)
+ {
+ if (cstring_equal (el, key))
+ {
+ return TRUE;
+ }
+
+ index++;
+ } end_cstringList_elements ;
+
+ return FALSE;
+}
+
+cstringList cstringList_copy (cstringList s)
+{
+ cstringList res = cstringList_newPredict (cstringList_size (s));
+
+ cstringList_elements (s, el)
+ {
+ res = cstringList_add (res, cstring_copy (el));
+ } end_cstringList_elements ;
+
+ return res;
+}
+
+cstring
+cstringList_get (cstringList s, int index)
+{
+ llassertretnull (s != NULL);
+ llassertretnull (index >= 0);
+ llassertretnull (index < s->nelements);
+ return s->elements[index];
+}
+
+ob_cstring *
+cstringList_getElements (cstringList s)
+{
+ if (cstringList_isDefined (s))
+ {
+ /*@-compmempass@*/
+ return s->elements;
+ /*@=compmempass@*/ /* This is exposed */
+ }
+ else
+ {
+ return NULL;
+ }
+}