void destroyLinks(cfuhash_table_t * linkHash) { char **keys = NULL; size_t *key_sizes = NULL; size_t key_count = 0; int i = 0; keys = (char **)cfuhash_keys_data(linkHash, &key_count, &key_sizes, 0); for (i = 0; i < (int)key_count; i++) { BM_linkPair * base_LP = cfuhash_get(linkHash, keys[i]); if(keys[i] != 0) { free(keys[i]); keys[i] = 0; } BM_linkInfo* LI = base_LP->LI; if (LI != 0) while(destroyLinkInfo_andNext(&LI)); if(base_LP !=0) { free(base_LP); base_LP = 0; } } if(keys != 0) { free(keys); keys = 0; } if(key_sizes != 0) { free(key_sizes); key_sizes = 0; } }
void printLinks(cfuhash_table_t * linkHash, char ** bamNames, char ** contigNames) { char **keys = NULL; size_t *key_sizes = NULL; size_t key_count = 0; int i = 0; keys = (char **)cfuhash_keys_data(linkHash, &key_count, &key_sizes, 0); for (i = 0; i < (int)key_count; i++) { PM_link_pair * LP = cfuhash_get(linkHash, keys[i]); free(keys[i]); printLinkPair(LP, bamNames, contigNames); } free(keys); free(key_sizes); }
int initLinkWalker(BM_LinkWalker * walker, cfuhash_table_t * linkHash) { // get some memory walker->linkHash = linkHash; walker->keyCount = 0; walker->numKeys = 0; size_t *key_sizes = NULL; // get the keys from the hash walker->keys = (char **)cfuhash_keys_data(linkHash, &(walker->numKeys), &key_sizes, 0); if((walker->keys)[walker->keyCount] != 0) { // we don't need this if (key_sizes != 0) { free(key_sizes); key_sizes = 0; } // load the first linkPair walker->pair = cfuhash_get(linkHash, (walker->keys)[walker->keyCount]); if ((walker->keys)[walker->keyCount] != 0) { free((walker->keys)[walker->keyCount]); (walker->keys)[walker->keyCount] = 0; } // tee-up the first linkInfo walker->LI = (walker->pair)->LI; return 2; } else { // no links if (walker->keys != 0) { free(walker->keys); walker->keys = 0; } } return 0; }