backbeat_c_sdk 0.5.0-beta

C SDK for Backbeat. Trivially integratable into all good games.
use crate::error::{BKB_ERR_NULL_ARG, bkb_error_code};
use crate::types::bkb_table;
use crate::util::run_ffi;

#[unsafe(no_mangle)]
pub unsafe extern "C" fn bkb_table_free(table: *mut bkb_table) {
	unsafe { bkb_table::free(table) };
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn bkb_table_chart_count(
	table: *const bkb_table,
	out_count: *mut usize,
) -> bkb_error_code {
	run_ffi(|| {
		if table.is_null() || out_count.is_null() {
			return Err(BKB_ERR_NULL_ARG);
		}
		let table = unsafe { &*table };
		let count = if table.levels_len == 0 {
			0
		} else {
			unsafe { std::slice::from_raw_parts(table.levels, table.levels_len) }
				.iter()
				.map(|level| level.charts_len)
				.sum()
		};
		unsafe { out_count.write(count) };
		Ok(())
	})
}

#[cfg(test)]
mod tests;