void calc_edits1(const char *word, map_t* edits, void load_f(map_t*,char*)) { int word_len, i; char c; word_len = strlen(word); char *temp = malloc(word_len+3 * sizeof(char)); char split[2][WORD_LEN_MAX]; for (i=0; i < word_len+1; ++i) { /** split */ scopy(split[0], word, i); scopy(split[1], &word[i], word_len - i); /** delete */ if (i < word_len) { scopy(temp, split[0], i); scopy(&temp[i], &split[1][1], word_len - i - 1); load_f(edits, temp); } /** inserts */ if (i < word_len+1) { for (c='a'; c <= 'z'; ++c) { scopy(temp, split[0], i); temp[i] = c; scopy(&temp[i+1], split[1], word_len - i); load_f(edits, temp); } } /** replaces */ if (i < word_len) { for (c='a'; c <= 'z'; ++c) { scopy(temp, split[0], i); temp[i] = c; scopy(&temp[i+1], &split[1][1], word_len - i - 1); load_f(edits, temp); } } /** transpose */ if (i < word_len-1) { scopy(temp, split[0], i); temp[i] = split[1][1]; temp[i+1] = split[1][0]; scopy(&temp[i+2], &split[1][2], word_len - i - 2); load_f(edits, temp); } } free(temp); }
void* ModuleLoader::load(const char* filename) { void* lib = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); if (!lib) { fprintf(stderr, "Error loading %s: %s\n", filename, dlerror()); } void (*load_f)() = (void(*)())get(lib, "load"); if (load_f) load_f(); return lib; }