ferretro/ferretro_base/src/dynamic_borrow.rs

104 lines
4.3 KiB
Rust
Raw Normal View History

2021-10-16 02:26:33 -07:00
use std::cell::RefCell;
use std::os::raw::c_uint;
use std::rc::Rc;
use std::path::PathBuf;
use crate::prelude::*;
use crate::retro::ffi::*;
impl<T: RetroCallbacks> RetroCallbacks for Rc<RefCell<T>> {
fn video_refresh(&mut self, frame: &VideoFrame) {
RefCell::borrow_mut(self).video_refresh(frame)
2021-10-16 02:26:33 -07:00
}
fn audio_samples(&mut self, stereo_pcm: &[i16]) -> usize {
RefCell::borrow_mut(self).audio_samples(stereo_pcm)
2021-10-16 02:26:33 -07:00
}
fn input_poll(&mut self) {
RefCell::borrow_mut(self).input_poll()
}
fn input_state(&mut self, port: u32, device: InputDeviceId, index: InputIndex) -> i16 {
RefCell::borrow_mut(self).input_state(port, device, index)
}
fn set_rotation(&mut self, rotation: EnvRotation) -> Option<bool> {
RefCell::borrow_mut(self).set_rotation(rotation)
}
fn get_overscan(&mut self) -> Option<bool> {
RefCell::borrow_mut(self).get_overscan()
}
fn set_message(&mut self, message: &Message) -> Option<bool> {
RefCell::borrow_mut(self).set_message(message)
}
fn shutdown(&mut self) -> Option<bool> {
RefCell::borrow_mut(self).shutdown()
}
fn set_performance_level(&mut self, level: c_uint) -> Option<bool> {
RefCell::borrow_mut(self).set_performance_level(level)
}
fn get_system_directory(&mut self) -> Option<PathBuf> {
RefCell::borrow_mut(self).get_system_directory()
}
fn set_pixel_format(&mut self, format: PixelFormat) -> Option<bool> {
RefCell::borrow_mut(self).set_pixel_format(format)
}
fn set_input_descriptors(&mut self, input_descriptors: &Vec<InputDescriptor2>) -> Option<bool> {
RefCell::borrow_mut(self).set_input_descriptors(input_descriptors)
}
fn set_hw_render(&mut self, hw_render_callback: &HwRenderCallback) -> Option<bool> {
RefCell::borrow_mut(self).set_hw_render(hw_render_callback)
}
fn get_variable(&mut self, key: &str) -> Option<String> {
RefCell::borrow_mut(self).get_variable(key)
}
fn set_variables(&mut self, variables: &Vec<Variable2>) -> Option<bool> {
RefCell::borrow_mut(self).set_variables(variables)
}
fn get_variable_update(&mut self) -> Option<bool> {
RefCell::borrow_mut(self).get_variable_update()
}
fn set_support_no_game(&mut self, supports_no_game: bool) -> Option<bool> {
RefCell::borrow_mut(self).set_support_no_game(supports_no_game)
}
fn get_libretro_path(&mut self) -> Option<PathBuf> {
RefCell::borrow_mut(self).get_libretro_path()
}
fn get_input_device_capabilities(&mut self) -> Option<u64> {
RefCell::borrow_mut(self).get_input_device_capabilities()
}
fn get_core_assets_directory(&mut self) -> Option<PathBuf> {
RefCell::borrow_mut(self).get_core_assets_directory()
}
fn get_save_directory(&mut self) -> Option<PathBuf> {
RefCell::borrow_mut(self).get_save_directory()
}
fn set_system_av_info(&mut self, system_av_info: &SystemAvInfo) -> Option<bool> {
RefCell::borrow_mut(self).set_system_av_info(system_av_info)
}
fn set_subsystem_info(&mut self, subsystem_info: &Vec<SubsystemInfo2>) -> Option<bool> {
RefCell::borrow_mut(self).set_subsystem_info(subsystem_info)
}
fn set_controller_info(&mut self, controller_info: &Vec<ControllerDescription2>) -> Option<bool> {
RefCell::borrow_mut(self).set_controller_info(controller_info)
}
fn set_memory_maps(&mut self, memory_map: &MemoryMap) -> Option<bool> {
RefCell::borrow_mut(self).set_memory_maps(memory_map)
}
fn set_geometry(&mut self, game_geometry: &GameGeometry) -> Option<bool> {
RefCell::borrow_mut(self).set_geometry(game_geometry)
}
fn get_username(&mut self) -> Option<String> {
RefCell::borrow_mut(self).get_username()
}
fn get_language(&mut self) -> Option<Language> {
RefCell::borrow_mut(self).get_language()
}
fn hw_get_current_framebuffer(&mut self) -> Option<usize> {
RefCell::borrow_mut(self).hw_get_current_framebuffer()
}
fn hw_get_proc_address(&mut self, sym: &str) -> Option<*const ()> {
RefCell::borrow_mut(self).hw_get_proc_address(sym)
}
// TODO: the rest, dynamically.
// can we proc macro it?
// 's~^\( *\)fn \(.*\)(&mut self\(, \)\?\([^)]*\))\(.*\){$~\1fn \2(\&mut self\3\4)\5{\n\1 RefCell::borrow_mut(self).\2(\4)~'
}