int main(int argc, char *argv[]) { int load_stuff = 0; //Set to 0 if training database needs to be created //int pass = 0; //int fail = 0; database_t *D; MATRIX ** M; if (load_stuff == 0) { D = CreateDatabase(TrainDatabasePath); M = FisherfaceCore(D); // save to binary file // save output_faces.mat T m V_PCA V_Fisher ProjectedImages_Fisher; // Recognition? DestroyFisher(M); DestroyDatabase(D); return 0; } else { fprintf(stderr, "Load the saved database"); // read binary file // load output_faces.mat; return 1; } }
int DeleteListEntry(TDbmListEntry *list, char *entryname) { int hash_value; TDbmListEntry *node; int found; TDbmListEntry *before; TDbmListEntry *after; int i,j; if(list==NULL || list->child==NULL || entryname==NULL) return(-1); hash_value = HashValueGenerator(entryname); node = list->child[hash_value]; if(node==NULL) return(-1); found = 0; before = NULL; after = node->next; while(!found && node!=NULL) { if(strcmp(node->key, entryname)==0) /* we've found the entry */ found = 1; if(!found) { before = node; node=node->next; } after = node->next; } if(node==NULL) return(-1); /* remove the list order entry */ i=0; while(node!=list->order[i]) i++; for(j=i; j< list->current_order-1; j++) list->order[j] = list->order[j+1]; list->order[list->current_order-1] = NULL; list->current_order--; /* delete the entry */ free(node->key); if(node->comment!=NULL) free(node->comment); switch(node->entry_type) { case DBM_ENTRY_VAR_STRING : case DBM_ENTRY_VAR_IDENT : if(node->value.str_val!=NULL ) free(node->value.str_val); break; case DBM_ENTRY_LIST : DestroyDatabase(node); free(node->child); free(node->order); break; } /* update the chained list */ if(before!=NULL) before->next = after; else list->child[hash_value] = after; return(1); }
int DestroyDatabase(TDbmListEntry *list) { int i; TDbmListEntry *node; int ret; for(i=0; i< list->current_order; i++) { node = list->order[i]; switch(node->entry_type) { case DBM_ENTRY_VAR_INT : if(node->comment!=NULL) free(node->comment); free(node->key); break; case DBM_ENTRY_VAR_REAL : if(node->comment!=NULL) free(node->comment); free(node->key); break; case DBM_ENTRY_VAR_STRING : if(node->comment!=NULL) free(node->comment); free(node->key); free(node->value.str_val); break; case DBM_ENTRY_VAR_IDENT : if(node->comment!=NULL) free(node->comment); free(node->key); free(node->value.str_val); break; case DBM_ENTRY_VAR_BOOL : if(node->comment!=NULL) free(node->comment); free(node->key); break; case DBM_ENTRY_LIST : if(node->comment!=NULL) free(node->comment); free(node->key); ret = DestroyDatabase(node); if(ret==-1) { RaiseError(DBM_DESTROY); return(-1); } free(node->child); free(node->order); break; default : RaiseError(DBM_DESTROY); return(-1); } } return(0); }