void recPrint(char *buffer, char *freeCh, NodePtr* temp, int prefixes){ int occur = temp -> numOfOccur; int superWords = temp -> numOfSuperwords; if(temp -> isParent == 0){ printf("%s %d %d %d\n", buffer, occur, prefixes, superWords); return; } if(temp -> isWord) printf("%s %d %d %d\n", buffer, occur, prefixes, superWords); prefixes += temp -> numOfOccur; int *intArr = temp -> usedIndices; int i = 0; for(i = 0; i < 26; i++){ if(intArr[i] == 1){ *freeCh = i + 'a'; freeCh++; recPrint(buffer, freeCh, &temp -> children[i], prefixes); //now we need to remove all extra characters till the next turn freeCh--; *freeCh = '\0'; } } }
// Writes record to a binary file. File descriptor must be passed as argument. ssize_t recWriteBin(int fh, Record *rec) { size_t size = sizeof(Record); ssize_t written; printf("Writing Record: "); recPrint(rec); if ((written = write(fh, rec, size))!=sizeof(Record)) { perror("write error"); } return written; }
// Writes record to a binary file. File descriptor must be passed as argument. ssize_t recWriteBin(int fh, Record *rec) { size_t size = sizeof(Record); ssize_t written; // Tells the user what record it is going to be written. printf("Writing Record: "); recPrint(rec); if ((written = write(fh, rec, size))!=sizeof(Record)) { perror("write error"); } return written; }
// reads the output file in order to ensure everything went ok int testRead(const char *filename) { int fh; if((fh = open(filename,O_RDONLY)) < 0) { perror("Error opening binary file"); return 1; } else { Record rec; while(read(fh, &rec, sizeof(Record))>0) { printf("Read Record: "); recPrint(&rec); } close(fh); return 0; } }
void printTrie(){ if(root.isParent == 0){ printf("empty dictionary\n"); } char *buffer; char *freeCh; int *intArr = root.usedIndices; int prefixes = 0; int i = 0; for(i = 0; i < 26; i++){ if(intArr[i] == 1){ buffer = calloc(101, sizeof(char)); freeCh = buffer; *freeCh = i + 'a'; freeCh++; recPrint(buffer, freeCh, &root.children[i], prefixes); free(buffer); } } }