1use std::{self, rc::Rc};
2use log;
3use crate::{ll, fmod_result, System};
4
5#[derive(Clone, Debug, PartialEq)]
6pub struct SoundGroup {
7 inner : Rc <Inner>,
8 system : System
9}
10
11#[derive(PartialEq)]
12struct Inner (*mut ll::FMOD_SOUNDGROUP);
13
14impl SoundGroup {
15 #[inline]
16 pub fn from_raw_parts (raw : *mut ll::FMOD_SOUNDGROUP, system : System)
17 -> Self
18 {
19 let inner = Rc::new (Inner (raw));
20 SoundGroup { inner, system }
21 }
22
23 #[inline]
24 #[expect(dead_code)]
25 fn raw (&self) -> *mut ll::FMOD_SOUNDGROUP {
26 self.inner.0
27 }
28
29 #[inline]
30 pub (crate) fn raw_mut (&mut self) -> *mut ll::FMOD_SOUNDGROUP {
31 self.inner.0
32 }
33}
34
35impl std::fmt::Debug for Inner {
36 fn fmt (&self, f : &mut std::fmt::Formatter) -> std::fmt::Result {
37 write!(f, "{:p}", self.0)
38 }
39}
40
41impl Drop for Inner {
42 fn drop (&mut self) {
43 unsafe {
44 let _ = fmod_result!(ll::FMOD_SoundGroup_Release (self.0)).map_err (
45 |err| log::error!("error releasing FMOD SoundGroup@{:p}: {:?}", self.0, err)
46 );
47 }
48 }
49}