Example #1
0
int set_delta(int *delta, int *select, int *select_sizes, int size, struct t_trace_list *list){
	int i;
	int remaining=0;
	int min=-1;
	int max=-1;
	int rand_choice;
	for(i=0 ; i < size; i++){
		if(delta[i] == -1){
			remaining++;
			continue;
		}
	}
	if(remaining == 0){
		return EXIT_SUCCESS;
	}
	rand_choice = rand() % size;
	while(delta[rand_choice] != -1){
		rand_choice = rand() % size;
	}
	if(remaining == size){
		delta[rand_choice] = 0;
		return set_delta(delta, select, select_sizes, size, list);
	}
	for(i=0 ; i < size ; i++){
		if(delta[i] == -1){
			continue;
		}
		if((min == -1) || (max == -1)){
			min = delta[i];
			max = list->trace_list[select[i]]->pkt_list[list->trace_list[select[i]]->num_elements-1]->time;
			continue;
		}
		if(delta[i] < min){
			min = delta[i];
		}
		if(list->trace_list[select[i]]->pkt_list[list->trace_list[select[i]]->num_elements-1]->time > max){
			max = list->trace_list[select[i]]->pkt_list[list->trace_list[select[i]]->num_elements-1]->time;
		}
	}
	if((max-min) <= 0){
		delta[rand_choice] = min;
	}
	else{
		delta[rand_choice] = (rand() % (max - min))+min;
	}
	return set_delta(delta, select, select_sizes, size, list);
}
Example #2
0
int main(int argc, char **argv){	
	struct t_trace_list *list;
	int i,j,k;
	int size;
	int *select;
	int *select_sizes;
	int *delta;
	int *label_list;
	int num_labels;
	int iterations;
	int max;
	list = load_t_trace_list(argv[1]);
	if(list == NULL){
		return EXIT_FAILURE;
	}
	size = argc - 3;
	if(size <= 0){
		return EXIT_FAILURE;
	}
	iterations = atoi(argv[2]);
	max = atoi(argv[3]);
	size = atoi(argv[4]);
	srand(time(NULL));
	for( ; iterations > 0 ; iterations--){
		select = (int *)malloc(sizeof(int) * size);
		select_sizes = (int *)malloc(sizeof(int) * size);
		delta = (int *)malloc(sizeof(int) * size);
		num_labels = 0;
		for(i=0 ; i < size ; i++){
			select[i] = rand() % max;
			select_sizes[i] = list->trace_list[select[i]]->num_elements;
			delta[i] = -1;
			num_labels += list->trace_list[select[i]]->num_labels;
		}
		label_list = (int *)malloc(sizeof(int) * num_labels);
		k=0;
		for(i=0 ; i < size ; i++){
			for(j=0 ; j < list->trace_list[select[i]]->num_labels ; j++){
				label_list[k++] = list->trace_list[select[i]]->label_list[j];
			}
		}
		set_delta(delta, select, select_sizes, size, list);
		printf(":%d", label_list[0]);
		for(i=1 ; i < num_labels ; i++){
			printf(",%d", label_list[i]);
		}
		printf("\n");
		free(label_list);
		while(remaining_work(select_sizes, size)){
			print_next_pkt(list, select, select_sizes, size, delta);
		}
		free(select);
		free(select_sizes);
		free(delta);
	}
	/*select = (int *)malloc(sizeof(int) * size);
	select_sizes = (int *)malloc(sizeof(int) * size);
	delta = (int *)malloc(sizeof(int) * size);
	num_labels = 0;
	for(i=0 ; i < size ; i++){
		select[i] = atoi(argv[i+3]);
		select_sizes[i] = list->trace_list[select[i]]->num_elements;
		delta[i] = -1;
		num_labels += list->trace_list[select[i]]->num_labels;
	}
	label_list = (int *)malloc(sizeof(int) * num_labels);
	k=0;
	for(i=0 ; i < size ; i++){
		for(j=0 ; j < list->trace_list[select[i]]->num_labels ; j++){
			label_list[k++] = list->trace_list[select[i]]->label_list[j];
		}
	}
	srand(time(NULL));
	set_delta(delta, select, select_sizes, size, list);
	//printf(":%d\n", atoi(argv[2]));
	printf(":%d", label_list[0]);
	for(i=1 ; i < num_labels ; i++){
		printf(",%d", label_list[i]);
	}
	printf("\n");
	free(label_list);
	while(remaining_work(select_sizes, size)){
		print_next_pkt(list, select, select_sizes, size, delta);
	}*/
	return EXIT_SUCCESS;
}
Example #3
0
	bool shape_record_factory(bit_stream_ptr bits, int version, unsigned& fill_bits, unsigned& line_bits, std::vector<shape_record_ptr>* records)
	{
		bool edge_record = bits->read_unsigned_bits(1) ? true : false;
		unsigned flags = unsigned(bits->read_unsigned_bits(5));
		if(flags == 0) {
			bits->force_byte_align();
			return false;
		}
		if(edge_record) {
			if(flags & 16) {
				// straight
				auto srp = std::make_shared<shape_record>(ShapeRecordTypes::LINE);
				unsigned num_bits = (flags & 0x0f) + 2;
				bool general_line = bits->read_unsigned_bits(1) ? true : false;
				delta_record dr;
				if(general_line) {
					dr.delta_x = int32_t(bits->read_unsigned_bits(num_bits));
					dr.delta_y = int32_t(bits->read_unsigned_bits(num_bits));
				} else {
					bool vertical_line = bits->read_unsigned_bits(1) ? true : false;
					if(vertical_line) {
						dr.delta_x = int32_t(bits->read_signed_bits(num_bits));
						dr.delta_y = 0;
					} else {
						dr.delta_x = 0;
						dr.delta_y = int32_t(bits->read_signed_bits(num_bits));
					}
				}
				srp->set_delta(dr);
				records->emplace_back(srp);
				return true;
			} else {
				auto cer = std::make_shared<curve_edge_record>();
				unsigned num_bits = (flags & 0x0f) + 2;
				delta_record dr;
				dr.delta_x = int32_t(bits->read_signed_bits(num_bits));
				dr.delta_y = int32_t(bits->read_signed_bits(num_bits));
				cer->set_control(dr);
				dr.delta_x = int32_t(bits->read_signed_bits(num_bits));
				dr.delta_y = int32_t(bits->read_signed_bits(num_bits));
				cer->set_anchor(dr);
				records->emplace_back(cer);
				return true;
			}
		} else {
			if(flags & 1) {
				std::shared_ptr<move_record> mrp = std::make_shared<move_record>();
				delta_record moves;
				unsigned move_bits = unsigned(bits->read_unsigned_bits(5));
				moves.delta_x = int32_t(bits->read_signed_bits(move_bits));
				moves.delta_y = int32_t(bits->read_signed_bits(move_bits));
				mrp->set_delta(moves);
				records->emplace_back(mrp);
			}
			if(flags & (2|4|8|16)) {
				std::shared_ptr<style_change_record> srp = std::make_shared<style_change_record>();
				if(flags & 2) {
					srp->set_fillstyle0_index(bits->read_unsigned_bits(fill_bits));
				}
				if(flags & 4) {
					srp->set_fillstyle1_index(bits->read_unsigned_bits(fill_bits));
				}
				if(flags & 8) {
					srp->set_linestyle_index(bits->read_unsigned_bits(line_bits));
				}
				if(flags & 16) {
					styles ss;
					ss.fill_styles_ = bits->read_fillstyle_array(version);
					ss.line_styles_ = bits->read_linestyle_array(version);
					fill_bits = ss.fill_bits_ = bits->read_unsigned_bits(4);
					line_bits = ss.line_bits_ = bits->read_unsigned_bits(4);
					srp->set_styles(ss);
				}
				records->emplace_back(srp);
			}
			return true;
		}
	}