Example #1
0
wi_boolean_t wi_p7_message_set_number_for_name(wi_p7_message_t *p7_message, wi_number_t *number, wi_string_t *field_name) {
	if(!number)
		number = wi_number_with_int32(0);
	
	if(wi_number_type(number) == WI_NUMBER_BOOL) {
		return wi_p7_message_set_bool_for_name(p7_message, wi_number_bool(number), field_name);
	} else {
		switch(wi_number_storage_type(number)) {
			case WI_NUMBER_STORAGE_INT32:
				return wi_p7_message_set_int32_for_name(p7_message, wi_number_int32(number), field_name);
				break;

			case WI_NUMBER_STORAGE_INT64:
				return wi_p7_message_set_int64_for_name(p7_message, wi_number_int64(number), field_name);
				break;

			case WI_NUMBER_STORAGE_FLOAT:
				return wi_p7_message_set_double_for_name(p7_message, wi_number_float(number), field_name);
				break;

			case WI_NUMBER_STORAGE_DOUBLE:
				return wi_p7_message_set_double_for_name(p7_message, wi_number_double(number), field_name);
				break;
		}
	}
	
	return false;
}
Example #2
0
wi_integer_t wi_number_integer(wi_number_t *number) {
#if WI_32
	return wi_number_int32(number);
#else
	return wi_number_int64(number);
#endif
}
Example #3
0
static void _wi_sqlite3_bind_statement(wi_sqlite3_statement_t *statement, va_list ap) {
	wi_string_t					*string;
	wi_runtime_instance_t		*instance;
	wi_runtime_id_t				id;
	wi_uinteger_t				index;
	int							result;
	
	index = 1;
	
	while((instance = va_arg(ap, wi_runtime_instance_t *))) {
		id			= wi_runtime_id(instance);
		result		= SQLITE_OK;
		
		if(id == wi_string_runtime_id()) {
			result = sqlite3_bind_text(statement->statement, index, wi_string_cstring(instance), wi_string_length(instance), SQLITE_STATIC);
		}
		else if(id == wi_number_runtime_id()) {
			switch(wi_number_storage_type(instance)) {
				case WI_NUMBER_STORAGE_INT8:
				case WI_NUMBER_STORAGE_INT16:
				case WI_NUMBER_STORAGE_INT32:
				case WI_NUMBER_STORAGE_INT64:
					result = sqlite3_bind_int64(statement->statement, index, wi_number_int64(instance));
					break;
					
				case WI_NUMBER_STORAGE_FLOAT:
				case WI_NUMBER_STORAGE_DOUBLE:
					result = sqlite3_bind_double(statement->statement, index, wi_number_double(instance));
					break;
			}
		}
		else if(id == wi_uuid_runtime_id()) {
			string = wi_uuid_string(instance);
			
			result = sqlite3_bind_text(statement->statement, index, wi_string_cstring(string), wi_string_length(string), SQLITE_STATIC);
		}
		else if(id == wi_date_runtime_id()) {
			string = wi_date_sqlite3_string(instance);
			
			result = sqlite3_bind_text(statement->statement, index, wi_string_cstring(string), wi_string_length(string), SQLITE_STATIC);
		}
		else if(id == wi_null_runtime_id()) {
			result = sqlite3_bind_null(statement->statement, index);
		}
		else if(id == wi_data_runtime_id()) {
			result = sqlite3_bind_blob(statement->statement, index, wi_data_bytes(instance), wi_data_length(instance), SQLITE_STATIC);
		}
		else {
			WI_ASSERT(0, "%@ is not a supported data type", instance);
		}
		
		WI_ASSERT(result == SQLITE_OK, "error %d while binding parameter %u", result, index);
		
		index++;
	}
}
Example #4
0
void wi_test_number(void) {
	WI_TEST_ASSERT_TRUE(wi_number_bool(wi_number_with_bool(true)), "");
	WI_TEST_ASSERT_FALSE(wi_number_bool(wi_number_with_bool(false)), "");
	WI_TEST_ASSERT_EQUALS(wi_number_int32(wi_number_with_int32(2147483647)), 2147483647, "");
	WI_TEST_ASSERT_EQUALS((uint32_t) wi_number_int32(wi_number_with_int32(4294967295U)), 4294967295U, "");
	WI_TEST_ASSERT_EQUALS(wi_number_int64(wi_number_with_int64(9223372036854775807LL)), 9223372036854775807LL, "");
	WI_TEST_ASSERT_EQUALS((uint64_t) wi_number_int64(wi_number_with_int64(18446744073709551615ULL)), 18446744073709551615ULL, "");

#ifdef WI_32
	WI_TEST_ASSERT_EQUALS(wi_number_integer(wi_number_with_integer(2147483647)), 2147483647, "");
	WI_TEST_ASSERT_EQUALS((wi_uinteger_t) wi_number_integer(wi_number_with_integer(4294967295U)), 4294967295U, "");
#else
	WI_TEST_ASSERT_EQUALS(wi_number_integer(wi_number_with_integer(9223372036854775807LL)), 9223372036854775807LL, "");
	WI_TEST_ASSERT_EQUALS((wi_uinteger_t) wi_number_integer(wi_number_with_integer(18446744073709551615ULL)), 18446744073709551615ULL, "");
#endif
	
	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_number_float(wi_number_with_float(3.40282346e38)), 3.40282346e38F, 0.0001, "");
	WI_TEST_ASSERT_EQUALS_WITH_ACCURACY(wi_number_double(wi_number_with_double(1.7976931348623155e308)), 1.7976931348623155e308, 0.0001, "");
}
Example #5
0
static wi_string_t * _wi_number_description(wi_runtime_instance_t *instance) {
	wi_number_t				*number = instance;
	wi_mutable_string_t		*string;
	
	string = wi_mutable_string_with_format(WI_STR("<%@ %p>{value = "),
		wi_runtime_class_name(number),
		number);
	
	if(_wi_number_is_float(number))
		wi_mutable_string_append_format(string, WI_STR("%f"), wi_number_double(number));
	else
		wi_mutable_string_append_format(string, WI_STR("%lld"), wi_number_int64(number));
	
	wi_mutable_string_append_string(string, WI_STR("}"));
	
	wi_runtime_make_immutable(string);
	
	return string;
}
Example #6
0
wi_boolean_t wi_p7_message_set_number_for_name(wi_p7_message_t *p7_message, wi_number_t *number, wi_string_t *field_name) {
	wi_p7_spec_field_t		*field;
	wi_p7_spec_type_t		*type;
	
	if(!number)
		number = wi_number_with_int32(0);
	
	field = wi_p7_spec_field_with_name(p7_message->spec, field_name);
	
	if(!field) {
		wi_error_set_libwired_error_with_format(WI_ERROR_P7_UNKNOWNFIELD,
			WI_STR("No id found for field \"%@\""), field_name);
		
		return false;
	}
	
	type = wi_p7_spec_field_type(field);
	
	if(!type) {
		wi_error_set_libwired_error_with_format(WI_ERROR_P7_UNKNOWNFIELD,
			WI_STR("No type found for field \"%@\""), field_name);
		
		return false;
	}
	
	switch(wi_p7_spec_type_id(type)) {
		case WI_P7_BOOL:
			return wi_p7_message_set_bool_for_name(p7_message, wi_number_bool(number), field_name);
			break;
			
		case WI_P7_ENUM:
			return wi_p7_message_set_enum_for_name(p7_message, wi_number_int32(number), field_name);
			break;
			
		case WI_P7_INT32:
			return wi_p7_message_set_int32_for_name(p7_message, wi_number_int32(number), field_name);
			break;
			
		case WI_P7_UINT32:
			return wi_p7_message_set_uint32_for_name(p7_message, wi_number_int32(number), field_name);
			break;
			
		case WI_P7_INT64:
			return wi_p7_message_set_int64_for_name(p7_message, wi_number_int64(number), field_name);
			break;
			
		case WI_P7_UINT64:
			return wi_p7_message_set_uint64_for_name(p7_message, wi_number_int64(number), field_name);
			break;
			
		case WI_P7_DOUBLE:
			return wi_p7_message_set_double_for_name(p7_message, wi_number_double(number), field_name);
			break;
			
		default:
			wi_error_set_libwired_error_with_format(WI_ERROR_P7_INVALIDARGUMENT,
				WI_STR("Field \"%@\" is not a number"), field_name);
			break;
	}

	return false;
}
Example #7
0
wi_string_t * wi_number_string(wi_number_t *number) {
	if(_wi_number_is_float(number))
		return wi_string_with_format(WI_STR("%f"), wi_number_double(number));
	else
		return wi_string_with_format(WI_STR("%lld"), wi_number_int64(number));
}