#include "arrayList.h" #include "FIDIndex.h" #include "StringHashTable.h" #include "nextField.h" #include "buildIndex.h" #include "GISParse.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_LINE_LENGTH 500 /** * table points to a StringHashTable struct, list points to an arrayList struct, * and gis points to a GIS file * * This method parses throguh a GIS file and populates hash table, defining the * keys as a combination between the name and state abreviation of the particular record * as well as storing each offset on which this key is found */ void build_name(StringHashTable *table, FILE *gis) { char *gisLine = calloc(MAX_LINE_LENGTH - 1, sizeof(char)); while (fgets(gisLine, MAX_LINE_LENGTH - 1, gis) != NULL) { uint32_t pos = ftell(gis) - strlen(gisLine); char *key = get_name_and_state(gisLine); StringHashTable_addEntry(table, key, pos); } free(gisLine); } /** * list points to an arrayList struct and gis points to a GIS file. * * The method parses through a GIS file and popualtes the arrayList with FIDIndex * structs that hold the filed ID and offset of each record in the file */ void build_FID(arrayList *list, FILE *gis) { char *gisLine = calloc(MAX_LINE_LENGTH - 1, sizeof(char)); while (fgets(gisLine, MAX_LINE_LENGTH - 1, gis) != NULL) { uint32_t pos = ftell(gis) - strlen(gisLine); char *ID = nextField(gisLine); FIDIndex *entry = FIDIndex_create(ID, pos); AL_insert(list, entry); } fseek(gis, 0, SEEK_SET); }