static void folder_free(void *data) { search_folder_t *folder = data; free(folder->mboxname); bv_free(&folder->uids); bv_free(&folder->unchecked_uids); free(folder); }
int main(int argc, char**argv) { if (argc != 2) { return 1; } char *formula = argv[1]; bv_program *p = bv_parse(formula); printf("RESULT: %llu\n", bv_eval(p, 1)); bv_free(p); return 0; }
static void reset_edge_overlay() { if (smbuf != NULL) { free(smbuf); smbuf = NULL; } if (edgebuf != NULL) { draw_restore(); // Refresh display to restore Canon OSD bv_free(edgebuf); edgebuf = NULL; } fsm_state = EDGE_LIVE; slice = 0; }
static void reset_edge_overlay() { if (smbuf != NULL) { free(smbuf); smbuf = NULL; } if (edgebuf != NULL) { gui_set_need_restore(); // Refresh display to restore Canon OSD bv_free(edgebuf); edgebuf = NULL; } fsm_state = EDGE_LIVE; slice = 0; // Clean up state saved in core CHDK module_save_edge(edgebuf, fsm_state); }
/** void setupDecoder(void) / Uses the current Convolutional Encoder to generate / the appropriate tables for an efficient Viterbi decoder / Should be called in main() before interrupt initialized */ void setupDecoder() { setPuncturing(FALSE); int i; int j; bv_t a = malloc (sizeof(struct bitvec)); bv_new(a, 1); bv_t b = malloc (sizeof(struct bitvec)); bv_new(b, 1); //*** this finds the properties of each state //generate the trellis (messages produced by state transitions) //generate decoding given two states for(i = 0; i < NUM_STATES; i++) { for(j = 0; j < NUM_STATES; j++) { Trellis[i][j] = -1; Decode[i][j] = -1; if(j < 2) InverseTransitions[i][j] = -1; } } // Trellis[0][0] = Trellis[1][2] = 0; // Trellis[1][0] = Trellis[0][2] = 3; // Trellis[2][1] = Trellis[3][3] = 1; // Trellis[3][1] = Trellis[2][3] = 2; for(i = 0; i < NUM_STATES; i++) { clear_vec(a); clear_vec(b); //get message and next state for input 0 setState(i); encode(a,0); Transitions[i][0] = getState(); if(InverseTransitions[getState()][0] == -1) InverseTransitions[getState()][0] = i; else InverseTransitions[getState()][1] = i; Trellis[i][getState()] = get(a,0,1); Decode[i][getState()] = 0; //get message and next state for input 1 setState(i); encode(b,1); Transitions[i][1] = getState(); if(InverseTransitions[getState()][0] == -1) InverseTransitions[getState()][0] = i; else InverseTransitions[getState()][1] = i; Trellis[i][getState()] = get(b,0,1); Decode[i][getState()] = 1; //initialize the decoded survivor paths paths[i] = malloc(sizeof(struct bitvec)); bv_new(paths[i], 32); paths_next[i] = malloc (sizeof(struct bitvec)); bv_new(paths_next[i], 32); } // for(i = 0; i < NUM_CODES; i++) { // for(j = 0; j < 2; j++) { // printf("%d: %d -> %d \n", Decode[i][Transitions[i][j]], i, Transitions[i][j]); // } // } // for(i = 0; i < NUM_CODES; i++) { // for(j = 0; j < 2; j++) { // printf("%d: %d -> %d \n", Decode[InverseTransitions[i][j]][i], InverseTransitions[i][j], i); // } // } for(i = 0; i < NUM_CODES; i++) { for(j = 0; j < NUM_CODES; j++) { printf("%d ", Trellis[i][j]); } printf("\n"); } printf("Hamming distance \n"); //pre-generate hamming distances for all messages for(i = 0; i < NUM_CODES; i++) { load(a,i); for(j = 0; j < NUM_CODES; j++) { load(b,j); HammingDistance[i][j] = hammingDistance(a,b); printf("%d ", HammingDistance[i][j]); } printf("\n"); } //reset the encoder and decoder clearState(); vit_dec_reset(); bv_free(a); bv_free(b); free(a); free(b); //set puncturing (only accomodates 2/3 puncture) setPuncturing(puncturedRec); }
void ctw_free(ContextTree *tree) { ctw_node_free(tree->root); bv_free(tree->history); ctw_list_free(tree->context); free(tree); }