[gbinder] Add double and float support. MER#1942
This commit is contained in:
@@ -71,6 +71,16 @@ gbinder_local_reply_append_int64(
|
||||
GBinderLocalReply* reply,
|
||||
guint64 value);
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_float(
|
||||
GBinderLocalReply* reply,
|
||||
gfloat value);
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_double(
|
||||
GBinderLocalReply* reply,
|
||||
gdouble value);
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_string8(
|
||||
GBinderLocalReply* reply,
|
||||
|
||||
@@ -71,6 +71,16 @@ gbinder_local_request_append_int64(
|
||||
GBinderLocalRequest* request,
|
||||
guint64 value);
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_float(
|
||||
GBinderLocalRequest* request,
|
||||
gfloat value);
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_double(
|
||||
GBinderLocalRequest* request,
|
||||
gdouble value);
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_string8(
|
||||
GBinderLocalRequest* request,
|
||||
|
||||
@@ -85,6 +85,16 @@ gbinder_reader_read_uint64(
|
||||
GBinderReader* reader,
|
||||
guint64* value);
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_float(
|
||||
GBinderReader* reader,
|
||||
gfloat* value);
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_double(
|
||||
GBinderReader* reader,
|
||||
gdouble* value);
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_nullable_object(
|
||||
GBinderReader* reader,
|
||||
|
||||
@@ -65,6 +65,16 @@ gbinder_writer_append_int64(
|
||||
GBinderWriter* writer,
|
||||
guint64 value);
|
||||
|
||||
void
|
||||
gbinder_writer_append_float(
|
||||
GBinderWriter* writer,
|
||||
gfloat value);
|
||||
|
||||
void
|
||||
gbinder_writer_append_double(
|
||||
GBinderWriter* writer,
|
||||
gdouble value);
|
||||
|
||||
void
|
||||
gbinder_writer_append_string16(
|
||||
GBinderWriter* writer,
|
||||
|
||||
@@ -193,6 +193,28 @@ gbinder_local_reply_append_int64(
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_float(
|
||||
GBinderLocalReply* self,
|
||||
gfloat value)
|
||||
{
|
||||
if (G_LIKELY(self)) {
|
||||
gbinder_writer_data_append_float(&self->data, value);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_double(
|
||||
GBinderLocalReply* self,
|
||||
gdouble value)
|
||||
{
|
||||
if (G_LIKELY(self)) {
|
||||
gbinder_writer_data_append_double(&self->data, value);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalReply*
|
||||
gbinder_local_reply_append_string8(
|
||||
GBinderLocalReply* self,
|
||||
|
||||
@@ -202,6 +202,28 @@ gbinder_local_request_append_int64(
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_float(
|
||||
GBinderLocalRequest* self,
|
||||
gfloat value)
|
||||
{
|
||||
if (G_LIKELY(self)) {
|
||||
gbinder_writer_data_append_float(&self->data, value);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_double(
|
||||
GBinderLocalRequest* self,
|
||||
gdouble value)
|
||||
{
|
||||
if (G_LIKELY(self)) {
|
||||
gbinder_writer_data_append_double(&self->data, value);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
GBinderLocalRequest*
|
||||
gbinder_local_request_append_string8(
|
||||
GBinderLocalRequest* self,
|
||||
|
||||
@@ -189,6 +189,46 @@ gbinder_reader_read_uint64(
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_float(
|
||||
GBinderReader* reader,
|
||||
gfloat* value)
|
||||
{
|
||||
GBinderReaderPriv* p = gbinder_reader_cast(reader);
|
||||
|
||||
if (gbinder_reader_can_read(p, sizeof(*value))) {
|
||||
if (value) {
|
||||
const gfloat* ptr = (void*)p->ptr;
|
||||
|
||||
*value = *ptr;
|
||||
}
|
||||
p->ptr += sizeof(*value);
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_double(
|
||||
GBinderReader* reader,
|
||||
gdouble* value)
|
||||
{
|
||||
GBinderReaderPriv* p = gbinder_reader_cast(reader);
|
||||
|
||||
if (gbinder_reader_can_read(p, sizeof(*value))) {
|
||||
if (value) {
|
||||
const gdouble* ptr = (void*)p->ptr;
|
||||
|
||||
*value = *ptr;
|
||||
}
|
||||
p->ptr += sizeof(*value);
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gbinder_reader_read_nullable_object(
|
||||
GBinderReader* reader,
|
||||
|
||||
@@ -169,6 +169,54 @@ gbinder_writer_data_append_int64(
|
||||
*ptr = value;
|
||||
}
|
||||
|
||||
void
|
||||
gbinder_writer_append_float(
|
||||
GBinderWriter* self,
|
||||
gfloat value)
|
||||
{
|
||||
GBinderWriterData* data = gbinder_writer_data(self);
|
||||
|
||||
if (G_LIKELY(data)) {
|
||||
gbinder_writer_data_append_float(data, value);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gbinder_writer_data_append_float(
|
||||
GBinderWriterData* data,
|
||||
gfloat value)
|
||||
{
|
||||
gfloat* ptr;
|
||||
|
||||
g_byte_array_set_size(data->bytes, data->bytes->len + sizeof(*ptr));
|
||||
ptr = (void*)(data->bytes->data + (data->bytes->len - sizeof(*ptr)));
|
||||
*ptr = value;
|
||||
}
|
||||
|
||||
void
|
||||
gbinder_writer_append_double(
|
||||
GBinderWriter* self,
|
||||
gdouble value)
|
||||
{
|
||||
GBinderWriterData* data = gbinder_writer_data(self);
|
||||
|
||||
if (G_LIKELY(data)) {
|
||||
gbinder_writer_data_append_double(data, value);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gbinder_writer_data_append_double(
|
||||
GBinderWriterData* data,
|
||||
gdouble value)
|
||||
{
|
||||
gdouble* ptr;
|
||||
|
||||
g_byte_array_set_size(data->bytes, data->bytes->len + sizeof(*ptr));
|
||||
ptr = (void*)(data->bytes->data + (data->bytes->len - sizeof(*ptr)));
|
||||
*ptr = value;
|
||||
}
|
||||
|
||||
void
|
||||
gbinder_writer_append_string8(
|
||||
GBinderWriter* self,
|
||||
|
||||
@@ -65,6 +65,16 @@ gbinder_writer_data_append_int64(
|
||||
GBinderWriterData* data,
|
||||
guint64 value);
|
||||
|
||||
void
|
||||
gbinder_writer_data_append_float(
|
||||
GBinderWriterData* data,
|
||||
gfloat value);
|
||||
|
||||
void
|
||||
gbinder_writer_data_append_double(
|
||||
GBinderWriterData* data,
|
||||
gdouble value);
|
||||
|
||||
void
|
||||
gbinder_writer_data_append_string8(
|
||||
GBinderWriterData* data,
|
||||
|
||||
@@ -81,6 +81,8 @@ test_null(
|
||||
|
||||
g_assert(!gbinder_local_reply_append_int32(NULL, 0));
|
||||
g_assert(!gbinder_local_reply_append_int64(NULL, 0));
|
||||
g_assert(!gbinder_local_reply_append_float(NULL, 0));
|
||||
g_assert(!gbinder_local_reply_append_double(NULL, 0));
|
||||
g_assert(!gbinder_local_reply_append_string8(NULL, NULL));
|
||||
g_assert(!gbinder_local_reply_append_string16(NULL, NULL));
|
||||
g_assert(!gbinder_local_reply_append_hidl_string(NULL, NULL));
|
||||
@@ -209,6 +211,50 @@ test_int64(
|
||||
gbinder_local_reply_unref(reply);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* float
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_float(
|
||||
void)
|
||||
{
|
||||
const gfloat value = 123456789;
|
||||
GBinderLocalReply* reply = gbinder_local_reply_new(&gbinder_io_32);
|
||||
GBinderOutputData* data;
|
||||
|
||||
gbinder_local_reply_append_float(reply, value);
|
||||
data = gbinder_local_reply_data(reply);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_reply_unref(reply);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* double
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_double(
|
||||
void)
|
||||
{
|
||||
const gdouble value = 123456789;
|
||||
GBinderLocalReply* reply = gbinder_local_reply_new(&gbinder_io_32);
|
||||
GBinderOutputData* data;
|
||||
|
||||
gbinder_local_reply_append_double(reply, value);
|
||||
data = gbinder_local_reply_data(reply);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_reply_unref(reply);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* string8
|
||||
*==========================================================================*/
|
||||
@@ -405,6 +451,8 @@ int main(int argc, char* argv[])
|
||||
g_test_add_func(TEST_PREFIX "bool", test_bool);
|
||||
g_test_add_func(TEST_PREFIX "int32", test_int32);
|
||||
g_test_add_func(TEST_PREFIX "int64", test_int64);
|
||||
g_test_add_func(TEST_PREFIX "float", test_float);
|
||||
g_test_add_func(TEST_PREFIX "double", test_double);
|
||||
g_test_add_func(TEST_PREFIX "string8", test_string8);
|
||||
g_test_add_func(TEST_PREFIX "string16", test_string16);
|
||||
g_test_add_func(TEST_PREFIX "hidl_string", test_hidl_string);
|
||||
|
||||
@@ -79,6 +79,8 @@ test_null(
|
||||
g_assert(!gbinder_local_request_append_bool(NULL, FALSE));
|
||||
g_assert(!gbinder_local_request_append_int32(NULL, 0));
|
||||
g_assert(!gbinder_local_request_append_int64(NULL, 0));
|
||||
g_assert(!gbinder_local_request_append_float(NULL, 0));
|
||||
g_assert(!gbinder_local_request_append_double(NULL, 0));
|
||||
g_assert(!gbinder_local_request_append_string8(NULL, NULL));
|
||||
g_assert(!gbinder_local_request_append_string16(NULL, NULL));
|
||||
g_assert(!gbinder_local_request_append_hidl_string(NULL, NULL));
|
||||
@@ -226,6 +228,50 @@ test_int64(
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* float
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_float(
|
||||
void)
|
||||
{
|
||||
const gfloat value = 123456789;
|
||||
GBinderLocalRequest* req = gbinder_local_request_new(&gbinder_io_32, NULL);
|
||||
GBinderOutputData* data;
|
||||
|
||||
gbinder_local_request_append_float(req, value);
|
||||
data = gbinder_local_request_data(req);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* double
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_double(
|
||||
void)
|
||||
{
|
||||
const gdouble value = 123456789;
|
||||
GBinderLocalRequest* req = gbinder_local_request_new(&gbinder_io_32, NULL);
|
||||
GBinderOutputData* data;
|
||||
|
||||
gbinder_local_request_append_double(req, value);
|
||||
data = gbinder_local_request_data(req);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* string8
|
||||
*==========================================================================*/
|
||||
@@ -405,6 +451,8 @@ int main(int argc, char* argv[])
|
||||
g_test_add_func(TEST_PREFIX "bool", test_bool);
|
||||
g_test_add_func(TEST_PREFIX "int32", test_int32);
|
||||
g_test_add_func(TEST_PREFIX "int64", test_int64);
|
||||
g_test_add_func(TEST_PREFIX "float", test_float);
|
||||
g_test_add_func(TEST_PREFIX "double", test_double);
|
||||
g_test_add_func(TEST_PREFIX "string8", test_string8);
|
||||
g_test_add_func(TEST_PREFIX "string16", test_string16);
|
||||
g_test_add_func(TEST_PREFIX "hidl_string", test_hidl_string);
|
||||
|
||||
@@ -73,6 +73,8 @@ test_empty(
|
||||
g_assert(!gbinder_reader_read_uint32(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_int64(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_uint64(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_float(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_double(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_object(&reader));
|
||||
g_assert(!gbinder_reader_read_nullable_object(&reader, NULL));
|
||||
g_assert(!gbinder_reader_read_buffer(&reader));
|
||||
@@ -244,6 +246,84 @@ test_int64(
|
||||
gbinder_driver_unref(driver);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* float
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_float(
|
||||
void)
|
||||
{
|
||||
const gfloat in = 42;
|
||||
gfloat out1 = 0;
|
||||
gfloat out2 = 0;
|
||||
GBinderDriver* driver = gbinder_driver_new(GBINDER_DEFAULT_BINDER);
|
||||
GBinderReader reader;
|
||||
GBinderReaderData data;
|
||||
|
||||
g_assert(driver);
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.buffer = gbinder_buffer_new(driver, g_memdup(&in, sizeof(in)),
|
||||
sizeof(in));
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_float(&reader, &out1));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
g_assert(in == out1);
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_float(&reader, &out2));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
g_assert(in == (gfloat)out2);
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_float(&reader, NULL));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
|
||||
gbinder_buffer_free(data.buffer);
|
||||
gbinder_driver_unref(driver);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* double
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_double(
|
||||
void)
|
||||
{
|
||||
const gdouble in = 42;
|
||||
gdouble out1 = 0;
|
||||
gdouble out2 = 0;
|
||||
GBinderDriver* driver = gbinder_driver_new(GBINDER_DEFAULT_BINDER);
|
||||
GBinderReader reader;
|
||||
GBinderReaderData data;
|
||||
|
||||
g_assert(driver);
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.buffer = gbinder_buffer_new(driver, g_memdup(&in, sizeof(in)),
|
||||
sizeof(in));
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_double(&reader, &out1));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
g_assert(in == out1);
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_double(&reader, &out2));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
g_assert(in == (gdouble)out2);
|
||||
|
||||
gbinder_reader_init(&reader, &data, 0, sizeof(in));
|
||||
g_assert(gbinder_reader_read_double(&reader, NULL));
|
||||
g_assert(gbinder_reader_at_end(&reader));
|
||||
|
||||
gbinder_buffer_free(data.buffer);
|
||||
gbinder_driver_unref(driver);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* string8
|
||||
*==========================================================================*/
|
||||
@@ -659,6 +739,8 @@ int main(int argc, char* argv[])
|
||||
g_test_add_func(TEST_PREFIX "bool", test_bool);
|
||||
g_test_add_func(TEST_PREFIX "int32", test_int32);
|
||||
g_test_add_func(TEST_PREFIX "int64", test_int64);
|
||||
g_test_add_func(TEST_PREFIX "float", test_float);
|
||||
g_test_add_func(TEST_PREFIX "double", test_double);
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(test_string8_tests); i++) {
|
||||
const TestStringData* test = test_string8_tests + i;
|
||||
|
||||
@@ -62,6 +62,10 @@ test_null(
|
||||
gbinder_writer_append_int32(&writer, 0);
|
||||
gbinder_writer_append_int64(NULL, 0);
|
||||
gbinder_writer_append_int64(&writer, 0);
|
||||
gbinder_writer_append_float(NULL, 0);
|
||||
gbinder_writer_append_float(&writer, 0);
|
||||
gbinder_writer_append_double(NULL, 0);
|
||||
gbinder_writer_append_double(&writer, 0);
|
||||
gbinder_writer_append_string8(NULL, NULL);
|
||||
gbinder_writer_append_string8(&writer, NULL);
|
||||
gbinder_writer_append_string8_len(NULL, NULL, 0);
|
||||
@@ -139,6 +143,54 @@ test_int64(
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* float
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_float(
|
||||
void)
|
||||
{
|
||||
const gfloat value = 12345678;
|
||||
GBinderLocalRequest* req = gbinder_local_request_new(&gbinder_io_32, NULL);
|
||||
GBinderOutputData* data;
|
||||
GBinderWriter writer;
|
||||
|
||||
gbinder_local_request_init_writer(req, &writer);
|
||||
gbinder_writer_append_float(&writer, value);
|
||||
data = gbinder_local_request_data(req);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* double
|
||||
*==========================================================================*/
|
||||
|
||||
static
|
||||
void
|
||||
test_double(
|
||||
void)
|
||||
{
|
||||
const gdouble value = 12345678;
|
||||
GBinderLocalRequest* req = gbinder_local_request_new(&gbinder_io_32, NULL);
|
||||
GBinderOutputData* data;
|
||||
GBinderWriter writer;
|
||||
|
||||
gbinder_local_request_init_writer(req, &writer);
|
||||
gbinder_writer_append_double(&writer, value);
|
||||
data = gbinder_local_request_data(req);
|
||||
g_assert(!gbinder_output_data_offsets(data));
|
||||
g_assert(!gbinder_output_data_buffers_size(data));
|
||||
g_assert(data->bytes->len == sizeof(value));
|
||||
g_assert(!memcmp(data->bytes->data, &value, data->bytes->len));
|
||||
gbinder_local_request_unref(req);
|
||||
}
|
||||
|
||||
/*==========================================================================*
|
||||
* bool
|
||||
*==========================================================================*/
|
||||
@@ -583,6 +635,8 @@ int main(int argc, char* argv[])
|
||||
g_test_add_func(TEST_PREFIX "null", test_null);
|
||||
g_test_add_func(TEST_PREFIX "int32", test_int32);
|
||||
g_test_add_func(TEST_PREFIX "int64", test_int64);
|
||||
g_test_add_func(TEST_PREFIX "float", test_float);
|
||||
g_test_add_func(TEST_PREFIX "double", test_double);
|
||||
g_test_add_func(TEST_PREFIX "bool", test_bool);
|
||||
g_test_add_func(TEST_PREFIX "bytes", test_bytes);
|
||||
g_test_add_func(TEST_PREFIX "string8", test_string8);
|
||||
|
||||
Reference in New Issue
Block a user