FreeCalypso > hg > ueda-linux
diff ueda/unet-bind/insthash.c @ 101:ffab0a4424ad
ueda: unet-bind program moved into sensibly named unet-bind subdir
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 29 Sep 2019 22:42:41 +0000 |
parents | ueda/sverp-bind/insthash.c@f7b09a54c2ce |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ueda/unet-bind/insthash.c Sun Sep 29 22:42:41 2019 +0000 @@ -0,0 +1,80 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "struct.h" + +#define HASH_SIZE 1103 +static struct instance *hashtab[HASH_SIZE]; + +static int +hash_instname(str) + char *str; +{ + register u_long accum = 0; + register char *cp; + register int c, i; + + for (cp = str, i = 1; c = *cp; cp++, i++) + accum += c * i; + return(accum % HASH_SIZE); +} + +struct instance * +enter_instance(newname) + char *newname; +{ + register struct instance *n, **np; + int namelen; + + for (np = hashtab + hash_instname(newname); n = *np; + np = &n->nextinhash) + if (!strcmp(n->name, newname)) { + fprintf(stderr, "error: duplicate instance name %s\n", + newname); + exit(1); + } + namelen = strlen(newname); + n = (struct instance *) malloc(sizeof(struct instance) + namelen + 1); + if (!n) { + perror("malloc"); + exit(1); + } + bzero(n, sizeof(struct instance)); + n->name = (char *)(n + 1); + strcpy(n->name, newname); + *np = n; + return n; +} + +struct instance * +find_instance(soughtname) + register char *soughtname; +{ + register struct instance *n; + + for (n = hashtab[hash_instname(soughtname)]; n; n = n->nextinhash) + if (!strcmp(n->name, soughtname)) + return(n); + return(0); +} + +check_unclaimed_instances() +{ + int hb; + register struct instance *n; + unsigned unclaimed_count = 0; + + for (hb = 0; hb < HASH_SIZE; hb++) + for (n = hashtab[hb]; n; n = n->nextinhash) + if (!n->claimed) { + fprintf(stderr, + "error: declared instance %s not claimed by input netlist\n", + n->name); + unclaimed_count++; + } + if (unclaimed_count) { + fprintf(stderr, "error: unclaimed instances found, aborting\n"); + exit(1); + } +}