loa

Virtual machine for the Logic of Assumptions
git clone git://juanmeleiro.mat.br/loa
Log | Files | Refs

symbol.c (763B)


      1 #include "symbol.h"
      2 #include <stdbool.h>
      3 #include <assert.h>
      4 #include <string.h>
      5 
      6 static char **db      = NULL;
      7 static size_t cap     = 0;
      8 static size_t len     = 0;
      9 static bool initialized = false;
     10 
     11 void
     12 initialize(void)
     13 {
     14 	cap = 1;
     15 	db = malloc(cap * sizeof(char*));
     16 	initialized = true;
     17 }
     18 
     19 symbol
     20 append(char *name)
     21 {
     22 	assert(initialized);
     23 	if (len == cap)
     24 		db = realloc(db, (cap *= 2)*sizeof(char*));
     25 	assert(db);
     26 	db[len] = malloc(sizeof(char)*strlen(name));
     27 	assert(db[len]);
     28 	strcpy(db[len], name);
     29 	return len++;
     30 }
     31 
     32 symbol
     33 intern(char *name)
     34 {
     35 	if (!initialized) initialize();
     36 	for (size_t i = 0; i < len; i++)
     37 		if (strcmp(name, db[i]) == 0)
     38 			return i;
     39 	return append(name);
     40 }
     41 
     42 char*
     43 repr(symbol s)
     44 {
     45 	if (!initialized) initialize();
     46 	return db[s];
     47 }