fmod/core/sound_group/
general.rs1use fmod_sys::*;
8use lanyard::Utf8CString;
9use std::ffi::{c_int, c_void};
10
11use crate::{get_string, SoundGroup, System};
12
13impl SoundGroup {
14 pub fn get_name(&self) -> Result<Utf8CString> {
16 get_string(|name| unsafe {
17 FMOD_SoundGroup_GetName(self.inner, name.as_mut_ptr().cast(), name.len() as c_int)
18 })
19 }
20
21 pub fn release(&self) -> Result<()> {
25 #[cfg(feature = "userdata-abstraction")]
27 let userdata = self.get_raw_userdata()?;
28
29 unsafe {
30 FMOD_SoundGroup_Release(self.inner).to_result()?;
31 }
32
33 #[cfg(feature = "userdata-abstraction")]
35 if !userdata.is_null() {
36 crate::userdata::remove_userdata(userdata.into());
37 self.set_raw_userdata(std::ptr::null_mut())?;
38 }
39
40 Ok(())
41 }
42
43 #[allow(clippy::not_unsafe_ptr_arg_deref)] pub fn set_raw_userdata(&self, userdata: *mut c_void) -> Result<()> {
45 unsafe { FMOD_SoundGroup_SetUserData(self.inner, userdata).to_result() }
46 }
47
48 pub fn get_raw_userdata(&self) -> Result<*mut c_void> {
49 let mut userdata = std::ptr::null_mut();
50 unsafe {
51 FMOD_SoundGroup_GetUserData(self.inner, &mut userdata).to_result()?;
52 }
53 Ok(userdata)
54 }
55
56 pub fn get_system(&self) -> Result<System> {
58 let mut system = std::ptr::null_mut();
59 unsafe { FMOD_SoundGroup_GetSystemObject(self.inner, &mut system).to_result()? };
60 Ok(system.into())
61 }
62}
63
64#[cfg(feature = "userdata-abstraction")]
65impl SoundGroup {
66 pub fn set_userdata(&self, userdata: crate::userdata::Userdata) -> Result<()> {
67 use crate::userdata::{insert_userdata, set_userdata};
68
69 let pointer = self.get_raw_userdata()?;
70 if pointer.is_null() {
71 let key = insert_userdata(userdata, *self);
72 self.set_raw_userdata(key.into())?;
73 } else {
74 set_userdata(pointer.into(), userdata);
75 }
76
77 Ok(())
78 }
79
80 pub fn get_userdata(&self) -> Result<Option<crate::userdata::Userdata>> {
81 use crate::userdata::get_userdata;
82
83 let pointer = self.get_raw_userdata()?;
84 Ok(get_userdata(pointer.into()))
85 }
86}