Пример #1
0
string Element_ToBytes(Element &e)
{
	int data_len;
	string encoded= "";
	if(e.type == Str_t) {
		return string(e.strPtr);
	}
	else if(e.type == ZR_t) {
		data_len = compute_length(e.type);
		uint8_t data[data_len+1];
		memset(data, 0, data_len);
		bn_write_bin(data, data_len, e.zr.z);
		string t((char *) data, data_len);
		encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size());
		memset(data, 0, data_len);
	}
	else if(e.type == G1_t) {
		data_len = compute_length(e.type);
		uint8_t data[data_len+1];
		memset(data, 0, data_len);
		g1_write_bin(e.g1.g, data, data_len);
		string t((char *) data, data_len);
		encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size());
		memset(data, 0, data_len);
	}
	else if(e.type == G2_t) {
		data_len = compute_length(e.type);
		uint8_t data[data_len+1];
		memset(data, 0, data_len);
		g2_write_bin(e.g2.g, data, data_len);
		string t((char *) data, data_len);
		encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size());
		memset(data, 0, data_len);
	}
	else if(e.type == GT_t) {
		data_len = compute_length(e.type);
		uint8_t data[data_len+1];
		memset(data, 0, data_len);
		gt_write_bin(e.gt.g, data, data_len); // x1-6 && y1-6
		string t((char *) data, data_len);
		encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size());
		memset(data, 0, data_len);
	}
	return encoded;
}
Пример #2
0
void build_constraints(Mesh* mesh_ptr) {
	
	mesh_ptr->numConstraints = (CLOTH_WIDTH * CLOTH_HEIGHT * 2) - CLOTH_WIDTH - CLOTH_HEIGHT;	
	mesh_ptr->constraintsBufferSize = mesh_ptr->numConstraints * 4;
	NSLog(@"rezerwacja pamieci dla bufora (rezerwaca 4 razy wiekszy niz potrzeba) mesh_ptr->constraints (ilosc: %d)", mesh_ptr->constraintsBufferSize);		
	mesh_ptr->constraints = (Constraint*)alloc_mem(1, sizeof(Constraint) * mesh_ptr->constraintsBufferSize);
	
	int i = 0;
	for (int y=0; y<CLOTH_HEIGHT; y++) {
		for (int x=0; x<CLOTH_WIDTH; x++) {
			if ((x+1) < CLOTH_WIDTH) {
				
				mesh_ptr->constraints[i].x1 = x;
				mesh_ptr->constraints[i].y1 = y;
				mesh_ptr->constraints[i].x2 = x+1;
				mesh_ptr->constraints[i].y2 = y;
				
				mesh_ptr->constraints[i].index0 = x     + (y * CLOTH_WIDTH);
				mesh_ptr->constraints[i].index1 = x + 1 + (y * CLOTH_WIDTH);				
				mesh_ptr->constraints[i].v0 = &mesh_ptr->vertices[x     + (y * CLOTH_WIDTH)];
				mesh_ptr->constraints[i].v1 = &mesh_ptr->vertices[x + 1 + (y * CLOTH_WIDTH)];
				
				mesh_ptr->constraints[i].length = compute_length(mesh_ptr->constraints[i].v0->current, 
																 mesh_ptr->constraints[i].v1->current);
				mesh_ptr->constraints[i].inv_length = 1/mesh_ptr->constraints[i].length;
				
				i++;
			}
			
			if ((y+1) < CLOTH_HEIGHT) {
				
				mesh_ptr->constraints[i].x1 = x;
				mesh_ptr->constraints[i].y1 = y;
				mesh_ptr->constraints[i].x2 = x;
				mesh_ptr->constraints[i].y2 = y+1;				
				
				mesh_ptr->constraints[i].index0 = x               + (y * CLOTH_WIDTH);
				mesh_ptr->constraints[i].index1 = x + CLOTH_WIDTH + (y * CLOTH_WIDTH);				
				
				mesh_ptr->constraints[i].v0 = &mesh_ptr->vertices[x               + (y * CLOTH_WIDTH)];
				mesh_ptr->constraints[i].v1 = &mesh_ptr->vertices[x + CLOTH_WIDTH + (y * CLOTH_WIDTH)];
				
				mesh_ptr->constraints[i].length = compute_length(mesh_ptr->constraints[i].v0->current,  
																 mesh_ptr->constraints[i].v1->current);				
				mesh_ptr->constraints[i].inv_length = 1/mesh_ptr->constraints[i].length;
				
				i++;
			}
			
			if (i > mesh_ptr->numConstraints) { 
				NSLog(@"!!!! brakuje miejsca dla constraintow, petla: %d, (%d, %d)", mesh_ptr->numConstraints, i, x, y);						
				break;
			}
						
			mesh_ptr->constraints[i].ignore = true;						
		}
		if (i > mesh_ptr->numConstraints) break;
	}
	
	if (i != mesh_ptr->numConstraints) {
		NSLog(@"constraintow: %d, petla: %d", mesh_ptr->numConstraints, i);	
	}
	
	return;
}