fmod/core/channel_control/
general.rs1use fmod_sys::*;
8use std::ffi::c_void;
9
10use crate::{ChannelControl, System};
11
12impl ChannelControl {
13 #[allow(clippy::not_unsafe_ptr_arg_deref)] pub fn set_raw_userdata(&self, userdata: *mut c_void) -> Result<()> {
17 unsafe { FMOD_ChannelControl_SetUserData(self.inner, userdata).to_result() }
18 }
19
20 pub fn get_raw_userdata(&self) -> Result<*mut c_void> {
21 let mut userdata = std::ptr::null_mut();
22 unsafe {
23 FMOD_ChannelControl_GetUserData(self.inner, &mut userdata).to_result()?;
24 }
25 Ok(userdata)
26 }
27
28 pub fn get_system(&self) -> Result<System> {
29 let mut system = std::ptr::null_mut();
30 unsafe { FMOD_ChannelControl_GetSystemObject(self.inner, &mut system).to_result()? }
31 Ok(system.into())
32 }
33}
34
35#[cfg(feature = "userdata-abstraction")]
36impl ChannelControl {
37 pub fn set_userdata(&self, userdata: crate::userdata::Userdata) -> Result<()> {
38 use crate::userdata::{insert_userdata, set_userdata};
39
40 let pointer = self.get_raw_userdata()?;
41 if pointer.is_null() {
42 let key = insert_userdata(userdata, *self);
43 self.set_raw_userdata(key.into())?;
44 } else {
45 set_userdata(pointer.into(), userdata);
46 }
47
48 Ok(())
49 }
50
51 pub fn get_userdata(&self) -> Result<Option<crate::userdata::Userdata>> {
52 use crate::userdata::get_userdata;
53
54 let pointer = self.get_raw_userdata()?;
55 Ok(get_userdata(pointer.into()))
56 }
57}