void ScrolledWindow::set_policy(PolicyType hpolicy, PolicyType vpolicy)throw(BadEnum) { if(!is_valid_enum_value(hpolicy)) throw BadEnum(); if(!is_valid_enum_value(vpolicy)) throw BadEnum(); _hpolicy = hpolicy; _vpolicy = vpolicy; recalc_size_request(); invalidate(); }
void ScrolledWindow::set_shadow_type(ShadowType shadow_type)throw(BadEnum) { if(!is_valid_enum_value(shadow_type)) throw BadEnum(); _shadow_type = shadow_type; recalc_size_request(); invalidate(); }
void interpret_chunk() { switch (this->chunk_type) { case META_FILE: this->info_version = this->stream.in_uint16_le(); this->info_width = this->stream.in_uint16_le(); this->info_height = this->stream.in_uint16_le(); this->info_bpp = this->stream.in_uint16_le(); this->info_cache_0_entries = this->stream.in_uint16_le(); this->info_cache_0_size = this->stream.in_uint16_le(); this->info_cache_1_entries = this->stream.in_uint16_le(); this->info_cache_1_size = this->stream.in_uint16_le(); this->info_cache_2_entries = this->stream.in_uint16_le(); this->info_cache_2_size = this->stream.in_uint16_le(); if (this->info_version <= 3) { this->info_number_of_cache = 3; this->info_use_waiting_list = false; this->info_cache_0_persistent = false; this->info_cache_1_persistent = false; this->info_cache_2_persistent = false; } else { this->info_number_of_cache = this->stream.in_uint8(); this->info_use_waiting_list = (this->stream.in_uint8() ? true : false); this->info_cache_0_persistent = (this->stream.in_uint8() ? true : false); this->info_cache_1_persistent = (this->stream.in_uint8() ? true : false); this->info_cache_2_persistent = (this->stream.in_uint8() ? true : false); this->info_cache_3_entries = this->stream.in_uint16_le(); this->info_cache_3_size = this->stream.in_uint16_le(); this->info_cache_3_persistent = (this->stream.in_uint8() ? true : false); this->info_cache_4_entries = this->stream.in_uint16_le(); this->info_cache_4_size = this->stream.in_uint16_le(); this->info_cache_4_persistent = (this->stream.in_uint8() ? true : false); this->info_compression_algorithm = static_cast<WrmCompressionAlgorithm>(this->stream.in_uint8()); REDASSERT(is_valid_enum_value(this->info_compression_algorithm)); if (!is_valid_enum_value(this->info_compression_algorithm)) { this->info_compression_algorithm = WrmCompressionAlgorithm::no_compression; } // re-init this->compression_wrapper.~CompressionTransportWrapper(); new (&this->compression_wrapper) CompressionInTransportWrapper( *this->trans_source, this->info_compression_algorithm); this->trans = &this->compression_wrapper.get(); } this->stream.rewind(); if (!this->meta_ok) { this->meta_ok = true; } break; case RESET_CHUNK: this->info_compression_algorithm = WrmCompressionAlgorithm::no_compression; this->trans = this->trans_source; break; } for (size_t i = 0; i < this->nbconsumers ; i++) { if (this->consumers[i]) { this->consumers[i]->chunk(this->chunk_type, this->chunk_count, this->stream.clone()); } } } // void interpret_chunk()
static json_t *member_data_to_json(const json_t *member, const qeocore_data_t *data) { json_t *json_data = NULL; json_t *id = json_object_get(member, KEY_ID); // Mandatory json_t *type = json_object_get(member, KEY_QEO_TYPE_CODE); // Mandatory if ((NULL == id) || (!json_is_integer(id)) || (NULL == type) || (!json_is_integer(type))) { return json_data; } qeocore_member_id_t qeo_member_id = (qeocore_member_id_t) json_integer_value(id); qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type); switch (qeoTypeCode) { case QEOCORE_TYPECODE_BOOLEAN: { qeo_boolean_t bool_value = 0; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &bool_value)) { json_data = bool_value ? (json_true()) : (json_false()); } } break; case QEOCORE_TYPECODE_INT8: { int8_t int_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) { json_data = json_integer(int_value); } } break; case QEOCORE_TYPECODE_INT16: { int16_t int_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) { json_data = json_integer(int_value); } } break; case QEOCORE_TYPECODE_INT32: { int32_t int_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) { json_data = json_integer(int_value); } } break; case QEOCORE_TYPECODE_INT64: { int64_t int_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) { char *char_value = NULL; if (-1 != asprintf(&char_value, "%" PRId64 "", int_value)) { json_data = json_string(char_value); free(char_value); } } } break; case QEOCORE_TYPECODE_FLOAT32: { float float_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &float_value)) { json_data = json_real(float_value); } } break; case QEOCORE_TYPECODE_STRING: { char *char_value; if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &char_value)) { json_data = json_string(char_value); free(char_value); } } break; case QEOCORE_TYPECODE_STRUCT: { qeocore_data_t *qeo_data = NULL; do { json_t *item = json_object_get(member, KEY_ITEM); if (NULL == item) { qeo_log_e("NULL == item"); break; } if (!json_is_object(item)) { qeo_log_e("not an object"); break; } if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &qeo_data)) { qeo_log_e("qeocore_data_get_member failed"); break; } if (NULL == qeo_data) { qeo_log_e("NULL == qeo_data"); break; } json_data = object_data_to_json(item, qeo_data); } while (0); if (NULL != qeo_data) { qeocore_data_free(qeo_data); } } break; case QEOCORE_TYPECODE_SEQUENCE: { json_t *items = json_object_get(member, KEY_ITEMS); if ((NULL != items) && json_is_object(items)) { qeocore_data_t *seqdata = NULL; if ((QEO_OK == qeocore_data_get_member(data, qeo_member_id, &seqdata)) && (NULL != seqdata)) { json_data = array_data_to_json(items, seqdata); qeocore_data_free(seqdata); } } } break; case QEOCORE_TYPECODE_ENUM: { qeo_enum_value_t enum_value; if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &enum_value)) { qeo_log_e("Could not get member"); break; } if (is_valid_enum_value(member, enum_value) == false){ qeo_log_e("Not a valid enum value"); break; } json_data = json_integer(enum_value); } break; } return json_data; }
static qeo_retcode_t array_to_data(json_t *elemtype, json_t *json_data, qeocore_data_t *data) { qeo_retcode_t result = QEO_EINVAL; json_t *type = json_object_get(elemtype, KEY_QEO_TYPE_CODE); // Mandatory if ((NULL == type) || (!json_is_integer(type))) { return result; } qeo_sequence_t seq = { 0 }; if (QEO_OK != qeocore_data_sequence_new(data, &seq, json_array_size(json_data))) { result = QEO_EFAIL; return result; } qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type); result = QEO_OK; int i; int numOfElem = json_array_size(json_data); for (i = 0; i < numOfElem; ++i) { json_t *elem = json_array_get(json_data, i); if (NULL == elem) { result = QEO_EFAIL; break; } result = QEO_EFAIL; switch (qeoTypeCode) { case QEOCORE_TYPECODE_BOOLEAN: { if (json_is_boolean(elem)) { ((qeo_boolean_t *)DDS_SEQ_DATA(seq))[i] = json_is_true(elem); result = QEO_OK; } } break; case QEOCORE_TYPECODE_INT8: { if (json_is_integer(elem)) { json_int_t json_value = json_integer_value(elem); if ((-128LL <= json_value) && (json_value <= 127LL)) { ((int8_t *)DDS_SEQ_DATA(seq))[i] = (int8_t) json_value; result = QEO_OK; } } } break; case QEOCORE_TYPECODE_INT16: { if (json_is_integer(elem)) { json_int_t json_value = json_integer_value(elem); if ((-32768LL <= json_value) && (json_value <= 32767LL)) { ((int16_t *)DDS_SEQ_DATA(seq))[i] = (int16_t) json_value; result = QEO_OK; } } } break; case QEOCORE_TYPECODE_INT32: { if (json_is_integer(elem)) { json_int_t json_value = json_integer_value(elem); if ((-2147483648LL <= json_value) && (json_value <= 2147483647LL)) { ((int32_t *)DDS_SEQ_DATA(seq))[i] = (int32_t) json_value; result = QEO_OK; } } } break; case QEOCORE_TYPECODE_INT64: { if (json_is_integer(elem)) { ((int64_t *)DDS_SEQ_DATA(seq))[i] = (int64_t) json_integer_value(elem); result = QEO_OK; } if (json_is_string(elem)) { const char *qeo_value = json_string_value(elem); intmax_t num = strtoimax(qeo_value, NULL, 10); ((int64_t *)DDS_SEQ_DATA(seq))[i] = (int64_t) num; result = QEO_OK; } } break; case QEOCORE_TYPECODE_FLOAT32: { /* *Also allow integer values, when float:0.0 is written in a webview then JSON.stringify can result into float:0 *meaning that the float 0.0 is transformed in an integer like 0, that's why we also need to allow integers, to be *able to handle these rounding issues. */ if (json_is_real(json_data) || json_is_integer(json_data)) { ((float *)DDS_SEQ_DATA(seq))[i] = (float) json_real_value(elem); result = QEO_OK; } } break; case QEOCORE_TYPECODE_STRING: { if (json_is_string(elem)) { ((char **)DDS_SEQ_DATA(seq))[i] = strdup(json_string_value(elem)); result = QEO_OK; } } break; case QEOCORE_TYPECODE_STRUCT: { if (json_is_object(elem)) { json_t *item = json_object_get(elemtype, KEY_ITEM); if ((NULL != item) && json_is_object(item)) { qeocore_data_t *qeo_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i]; result = object_to_data(item, elem, qeo_value); } } } break; case QEOCORE_TYPECODE_SEQUENCE: { if (json_is_array(elem)) { json_t *items = json_object_get(elemtype, KEY_ITEMS); if ((NULL != items) && json_is_object(items)) { qeocore_data_t *qeo_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i]; result = array_to_data(items, elem, qeo_value); } } } break; case QEOCORE_TYPECODE_ENUM: { if (!json_is_integer(json_data)){ qeo_log_e("Enum should be integer"); break; } qeo_enum_value_t enum_val = (qeo_enum_value_t) json_integer_value(json_data); if (is_valid_enum_value(elemtype, enum_val) == false){ qeo_log_e("Could not convert json to enum"); break; } ((qeo_enum_value_t *)DDS_SEQ_DATA(seq))[i] = enum_val; } break; } if (QEO_OK != result) { break; } } if (QEO_OK == result) { result = qeocore_data_sequence_set(data, &seq, 0); } return result; }
static qeo_retcode_t member_to_data(json_t *member, json_t *json_data, qeocore_data_t *data) { qeo_retcode_t result = QEO_EINVAL; json_t *id = json_object_get(member, KEY_ID); // Mandatory json_t *type = json_object_get(member, KEY_QEO_TYPE_CODE); // Mandatory if ((NULL == id) || (!json_is_integer(id)) || (NULL == type) || (!json_is_integer(type))) { return result; } result = QEO_EFAIL; qeocore_member_id_t qeo_member_id = (qeocore_member_id_t) json_integer_value(id); qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type); /* bool isKey = false; json_t *key_value = json_object_get(member, KEY_KEY); if ((NULL != key_value) && (json_is_true(key_value))) { isKey = true; } */ switch (qeoTypeCode) { case QEOCORE_TYPECODE_BOOLEAN: { if (json_is_boolean(json_data)) { qeo_boolean_t qeo_value = (qeo_boolean_t) json_is_true(json_data); result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } break; case QEOCORE_TYPECODE_INT8: { if (json_is_integer(json_data)) { json_int_t json_value = json_integer_value(json_data); if ((-128LL <= json_value) && (json_value <= 127LL)) { int8_t qeo_value = (int8_t)json_value; result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } } break; case QEOCORE_TYPECODE_INT16: { if (json_is_integer(json_data)) { json_int_t json_value = json_integer_value(json_data); if ((-32768LL <= json_value) && (json_value <= 32767LL)) { int16_t qeo_value = (int16_t)json_value; result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } } break; case QEOCORE_TYPECODE_INT32: { if (json_is_integer(json_data)) { json_int_t json_value = json_integer_value(json_data); if ((-2147483648LL <= json_value) && (json_value <= 2147483647LL)) { int32_t qeo_value = (int32_t)json_value; result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); } } } break; case QEOCORE_TYPECODE_INT64: { if (json_is_integer(json_data)) { int64_t qeo_value = (int64_t) json_integer_value(json_data); result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } if (json_is_string(json_data)) { const char *qeo_value = json_string_value(json_data); intmax_t num = strtoimax(qeo_value, NULL, 10); result = qeocore_data_set_member(data, qeo_member_id, (int64_t *) &num); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } break; case QEOCORE_TYPECODE_FLOAT32: { /* *Also allow integer values, when float:0.0 is written in a webview then JSON.stringify can result into float:0 *meaning that the float 0.0 is transformed in an integer like 0, that's why we also need to allow integers, to be *able to handle these rounding issues. */ if (json_is_real(json_data) || json_is_integer(json_data)) { float qeo_value = (float) json_real_value(json_data); result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } break; case QEOCORE_TYPECODE_STRING: { if (json_is_string(json_data)) { const char *qeo_value = json_string_value(json_data); result = qeocore_data_set_member(data, qeo_member_id, &qeo_value); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed"); } } } break; case QEOCORE_TYPECODE_STRUCT: { if (json_is_object(json_data)) { qeocore_data_t *qeo_data = NULL; do { if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &qeo_data)) { qeo_log_e("qeocore_data_get_member failed"); break; } if (NULL == qeo_data) { qeo_log_e("NULL == qeo_data"); break; } json_t *item = json_object_get(member, KEY_ITEM); if (NULL == item) { qeo_log_e("NULL == item"); break; } if (!json_is_object(item)) { qeo_log_e("item is not an object"); break; } result = object_to_data(item, json_data, qeo_data); if (QEO_OK != result) { qeo_log_e("object_to_data failed"); break; } result = qeocore_data_set_member(data, qeo_member_id, &qeo_data); if (QEO_OK != result) { qeo_log_e("qeocore_data_set_member failed: member_id:%u", qeo_member_id); break; } } while (0); if (NULL != qeo_data) { qeocore_data_free(qeo_data); } } } break; case QEOCORE_TYPECODE_SEQUENCE: { if (json_is_array(json_data)) { qeocore_data_t *qeo_data = NULL; if ((QEO_OK == qeocore_data_get_member(data, qeo_member_id, &qeo_data)) && (NULL != qeo_data)) { json_t *items = json_object_get(member, KEY_ITEMS); if ((NULL != items) && json_is_object(items)) { if (QEO_OK == array_to_data(items, json_data, qeo_data)) { result = qeocore_data_set_member(data, qeo_member_id, &qeo_data); } } } qeocore_data_free(qeo_data); } } break; case QEOCORE_TYPECODE_ENUM: { if (!json_is_integer(json_data)){ qeo_log_e("Enum should be integer"); break; } qeo_enum_value_t enum_val = (qeo_enum_value_t) json_integer_value(json_data); if (is_valid_enum_value(member, enum_val) == false){ qeo_log_e("Could not convert json to enum"); break; } result = qeocore_data_set_member(data, qeo_member_id, &enum_val); } break; } return result; }
static json_t *array_data_to_json(const json_t *typedesc, qeocore_data_t *data) { json_t *json_data = NULL; qeo_sequence_t seq = { 0 }; json_t *type = json_object_get(typedesc, KEY_QEO_TYPE_CODE); // Mandatory if ((NULL == type) || (!json_is_integer(type)) || (QEO_OK != qeocore_data_sequence_get(data, &seq, 0, QEOCORE_SIZE_UNLIMITED))) { return json_data; } json_data = json_array(); qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type); int i; int numOfElem = DDS_SEQ_LENGTH(seq); for (i = 0; i < numOfElem; ++i) { switch (qeoTypeCode) { case QEOCORE_TYPECODE_BOOLEAN: { qeo_boolean_t bool_value = ((qeo_boolean_t *)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, bool_value ? (json_true()) : (json_false())); } break; case QEOCORE_TYPECODE_INT8: { int8_t int_value = ((int8_t *)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, json_integer((json_int_t)int_value)); } break; case QEOCORE_TYPECODE_INT16: { int8_t int_value = ((int16_t *)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, json_integer((json_int_t)int_value)); } break; case QEOCORE_TYPECODE_INT32: { int8_t int_value = ((int32_t *)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, json_integer((json_int_t)int_value)); } break; case QEOCORE_TYPECODE_INT64: { int64_t int_value = ((int64_t *)DDS_SEQ_DATA(seq))[i]; char *char_value = NULL; if (-1 != asprintf(&char_value, "%" PRId64 "", int_value)) { json_array_append_new(json_data, json_string(char_value)); free(char_value); } } break; case QEOCORE_TYPECODE_STRING: { char *char_value = ((char **)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, json_string(char_value)); } break; case QEOCORE_TYPECODE_STRUCT: { json_t *item = json_object_get(typedesc, KEY_ITEM); if ((NULL != item) && json_is_object(item)) { qeocore_data_t *object_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i]; json_t *json_element = object_data_to_json(item, object_value); if (NULL != json_element) { json_array_append_new(json_data, json_element); } else { json_decref(json_data); json_data = NULL; } } else { json_decref(json_data); json_data = NULL; } } break; case QEOCORE_TYPECODE_SEQUENCE: { json_t *items = json_object_get(typedesc, KEY_ITEMS); if ((NULL != items) && json_is_object(items)) { qeocore_data_t *element_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i]; json_t *json_element = array_data_to_json(items, element_value); if (NULL != json_element) { json_array_append_new(json_data, json_element); } else { json_decref(json_data); json_data = NULL; } } else { json_decref(json_data); json_data = NULL; } } break; case QEOCORE_TYPECODE_ENUM: { qeo_enum_value_t enum_value = ((qeo_enum_value_t *)DDS_SEQ_DATA(seq))[i]; if (is_valid_enum_value(typedesc, enum_value) == false){ qeo_log_e("Not a valid enum value"); break; } json_t *json_enum = json_integer(enum_value); json_array_append_new(json_data, json_enum); } break; case QEOCORE_TYPECODE_FLOAT32: { float float_value = ((float *)DDS_SEQ_DATA(seq))[i]; json_array_append_new(json_data, json_real(float_value)); } break; } if (NULL == json_data) { break; } } qeocore_data_sequence_free(data, &seq); return json_data; }