Rewrite most location array member accessors

This commit is contained in:
Alexander Krotov
2019-07-24 02:33:10 +03:00
parent f27dda86ff
commit 1cd7cb541c

View File

@@ -55,6 +55,42 @@ impl dc_array_t {
self.array[index] as *mut libc::c_void self.array[index] as *mut libc::c_void
} }
pub unsafe fn get_location_ptr(&self, index: usize) -> Option<*mut dc_location> {
if self.type_0 == DC_ARRAY_LOCATIONS && self.array[index] != 0 {
Some(self.array[index] as *mut dc_location)
} else {
None
}
}
pub unsafe fn get_latitude(&self, index: usize) -> libc::c_double {
self.get_location_ptr(index).map_or(0.0, |v| (*v).latitude)
}
pub unsafe fn get_longitude(&self, index: size_t) -> libc::c_double {
self.get_location_ptr(index).map_or(0.0, |v| (*v).longitude)
}
pub unsafe fn get_accuracy(&self, index: size_t) -> libc::c_double {
self.get_location_ptr(index).map_or(0.0, |v| (*v).accuracy)
}
pub unsafe fn get_timestamp(&self, index: size_t) -> i64 {
self.get_location_ptr(index).map_or(0, |v| (*v).timestamp)
}
pub unsafe fn get_chat_id(&self, index: size_t) -> uint32_t {
self.get_location_ptr(index).map_or(0, |v| (*v).chat_id)
}
pub unsafe fn get_contact_id(&self, index: size_t) -> uint32_t {
self.get_location_ptr(index).map_or(0, |v| (*v).contact_id)
}
pub unsafe fn get_msg_id(&self, index: size_t) -> uint32_t {
self.get_location_ptr(index).map_or(0, |v| (*v).msg_id)
}
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
self.array.is_empty() self.array.is_empty()
} }
@@ -146,80 +182,59 @@ pub unsafe fn dc_array_get_ptr(array: *const dc_array_t, index: size_t) -> *mut
} }
pub unsafe fn dc_array_get_latitude(array: *const dc_array_t, index: size_t) -> libc::c_double { pub unsafe fn dc_array_get_latitude(array: *const dc_array_t, index: size_t) -> libc::c_double {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0.0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_latitude(index)
{
return 0i32 as libc::c_double;
} }
(*((*array).array[index] as *mut dc_location)).latitude
} }
pub unsafe fn dc_array_get_longitude(array: *const dc_array_t, index: size_t) -> libc::c_double { pub unsafe fn dc_array_get_longitude(array: *const dc_array_t, index: size_t) -> libc::c_double {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0.0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_longitude(index)
{
return 0i32 as libc::c_double;
} }
(*((*array).array[index] as *mut dc_location)).longitude
} }
pub unsafe fn dc_array_get_accuracy(array: *const dc_array_t, index: size_t) -> libc::c_double { pub unsafe fn dc_array_get_accuracy(array: *const dc_array_t, index: size_t) -> libc::c_double {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0.0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_accuracy(index)
{
return 0i32 as libc::c_double;
} }
(*((*array).array[index] as *mut dc_location)).accuracy
} }
pub unsafe fn dc_array_get_timestamp(array: *const dc_array_t, index: size_t) -> i64 { pub unsafe fn dc_array_get_timestamp(array: *const dc_array_t, index: size_t) -> i64 {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_timestamp(index)
{
return 0;
} }
(*((*array).array[index] as *mut dc_location)).timestamp
} }
pub unsafe fn dc_array_get_chat_id(array: *const dc_array_t, index: size_t) -> uint32_t { pub unsafe fn dc_array_get_chat_id(array: *const dc_array_t, index: size_t) -> uint32_t {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_chat_id(index)
{
return 0i32 as uint32_t;
} }
(*((*array).array[index] as *mut dc_location)).chat_id
} }
pub unsafe fn dc_array_get_contact_id(array: *const dc_array_t, index: size_t) -> uint32_t { pub unsafe fn dc_array_get_contact_id(array: *const dc_array_t, index: size_t) -> uint32_t {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_contact_id(index)
{
return 0i32 as uint32_t;
} }
(*((*array).array[index] as *mut dc_location)).contact_id
} }
pub unsafe fn dc_array_get_msg_id(array: *const dc_array_t, index: size_t) -> uint32_t { pub unsafe fn dc_array_get_msg_id(array: *const dc_array_t, index: size_t) -> uint32_t {
if array.is_null() if array.is_null() || index >= (*array).len() {
|| index >= (*array).len() 0
|| (*array).type_0 != DC_ARRAY_LOCATIONS } else {
|| (*array).array[index] == 0 (*array).get_msg_id(index)
{
return 0i32 as uint32_t;
} }
(*((*array).array[index] as *mut dc_location)).msg_id
} }
pub unsafe fn dc_array_get_marker(array: *const dc_array_t, index: size_t) -> *mut libc::c_char { pub unsafe fn dc_array_get_marker(array: *const dc_array_t, index: size_t) -> *mut libc::c_char {