inline void SequentialHybridStrategy::initialize_iterator(int job_index)
{
  if (seqCount) { // else default initialization is used
    VariablesArray partial_param_sets;
    extract_parameter_sets(job_index, partial_param_sets);
    initialize_iterator(partial_param_sets);
  }
}
inline void SequentialHybridStrategy::
unpack_parameters_buffer(MPIUnpackBuffer& recv_buffer)
{
  if (seqCount) { // else default initialization is used
    VariablesArray param_sets;
    recv_buffer >> param_sets;
    initialize_iterator(param_sets);
  }
}
Example #3
0
iterator_state* iterate(parameter_struct* parameters) {
	if (parameters == 0 ||
			parameters->callback == 0 ||
			parameters->strings == 0)
		return 0;

	iterator_state* state;

	switch (parameters->iterate_type) {
	case MUM: //do the same as for mem
	case MEM:
		//initialize iterator state for using double iterate
		state = initialize_iterator(parameters->strings, 2);
		state->threshold = parameters->threshold;

		/*parameters->ret_data = */double_iterate(state, parameters->callback, parameters->ret_data);

		//free all resources
		/*free_wavelet_tree(&state->bwts[0]);
		free_wavelet_tree(&state->bwts[1]);

		free_wavelet_tree(&state->reverse_bwts[0]);
		free_wavelet_tree(&state->reverse_bwts[1]);

		free_bit_vector(&state->runs_vectors[0]);
		free_bit_vector(&state->runs_vectors[1]);

		free_stack(&state->stacks[0]);
		free_stack(&state->stacks[1]);

		free(state->normals);
		free(state->reverses);
		free(state->current);
		free(state->prev);
		free(state->alpha_datas[0]->alphabet);
		free(state->alpha_datas[1]->alphabet);
		free(state->alpha_datas[0]);
		free(state->alpha_datas[1]);
		free(state->c_arrays[0]);
		free(state->c_arrays[1]);
		free(state->c_arrays);
		free(state->common_alphabets[0]);
		free(state->common_alphabets);*/

		break;
	case DOT_TREE: //do the same as for max repeats
	case MAX_REPEATS: //do the same as default
	default:
		//initialize iterator state for using single iterate
		state = initialize_iterator(parameters->strings, 1);
		state->threshold = parameters->threshold;
		/*parameters->ret_data = */single_iterate(state, parameters->callback, parameters->ret_data);

		//free all resources
		/*free_wavelet_tree(state->bwts);
		free_wavelet_tree(state->reverse_bwts);
		free_bit_vector(state->runs_vectors);
		free_stack(state->stacks);
		free(state->normals);
		free(state->reverses);
		free(state->current);
		free(state->prev);
		free(state->c_arrays);
		free(state->alpha_datas->alphabet);
		free(state->alpha_datas);*/

		break;
	}

	//free(state);

	return state;
}
Example #4
0
File: ui.c Project: Sobih/BW4SA
void ui()
{
	int choice, len = 0;
	char* input = malloc(sizeof(char)*MAX_INPUT_STRING_LENGTH);
	char* res = malloc(sizeof(char));
	int* array = calloc(20, sizeof(int)); 
	
	print_choices();
	
	printf("Write the number of the operation you want to do:\n");
	scanf("%d", &choice);
	
	printf("Give the input string: (max size %d) ", MAX_INPUT_STRING_LENGTH);
	print_instructions(choice);
	scanf("%s", input);
	wavelet_tree* root = create_wavelet_tree(input);
	wavelet_tree* res_root;

	if (choice == 1) {
		char** strings = malloc(sizeof(char*));
		strings[0] = input;
		iterator_state* state = initialize_iterator(strings, 1);
		single_iterate(state, &print_node, 0);
		free_iterator_state(state);
		free(strings);
	} else if (choice == 2) {
		res_root = s_to_bwt(input);
		print_wavelet_tree(res_root);
	} else if (choice == 3) {
		res = bwt_to_s(root);
		printf("%s\n", res);
	} else if (choice == 4) {
		res_root = reverse_bwt(input);
		print_wavelet_tree(res_root);
	} else if (choice == 5) {
		array = create_c_array(root,0,0,0,0);
		int len = strlen(determine_alphabet(input));
		print_int_array(array, len);
	} else if (choice == 6) {
		bit_vector* runs = create_runs_vector(root,0);
		print_runs_vector(runs, strlen(input)+1);
		free_bit_vector(runs);
	} else if (choice == 7) {
		printf("Give the second input string: ");
		char* input2 = malloc(sizeof(char)*MAX_INPUT_STRING_LENGTH);
		scanf("%s", input2);

		char** strings = malloc(2 * sizeof(char*));
		strings[0] = input;
		strings[1] = input2;
		parameter_struct* params = initialize_for_mums(strings, 0);
		iterator_state* state = iterate(params);
		mum_results* results = (mum_results*) params->ret_data;
		triplet* nodes = results->data;

		print_mums(input, results, state);
		mum_print_bit_vectors(input,input2, results, state);

		free(strings);
		free(results->data);
		free_iterator_state(state);

	} else if (choice == 8) {
		printf("Not supported yet\n");
	} else if (choice == 9) {
		printf("%d\n", distinct_substrings(input));
	} else if (choice == 10) {
		parameter_struct* params = initialize_for_max_repeats(input, 0);
		iterator_state* state = iterate(params);
		max_repeat_results* results = (max_repeat_results*) params->ret_data;
		//maximals_print_nodes(input);

		print_maximal_repeat_substrings(input, results, state);
		//compare_quick_sort()
	} else if (choice == 11) {
		printf("Give the second input string: ");
		char* input2 = malloc(sizeof(char)*MAX_INPUT_STRING_LENGTH);
		scanf("%s", input2);

		char** strings = malloc(2 * sizeof(char*));
		strings[0] = input;
		strings[1] = input2;
		parameter_struct* params = initialize_for_mems(strings, 0);
		iterator_state* state = iterate(params);
		mem_results* results = (mem_results*) params->ret_data;
		triplet* nodes = results->data;

		print_mems(input, results, state);

		free(strings);
		free(results->data);
		free_iterator_state(state);
	}else {
		printf("Invalid choice\n");
	}


}