From bec239655c3d23db8a19b55cf08b232c5026a5f2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 27 Apr 2016 03:15:21 -0400 Subject: remove some unnecessary wrappers --- src/ffi.c | 10 ---------- src/ffi.rs | 2 -- src/screen.rs | 21 +++++++++++++++++++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/ffi.c b/src/ffi.c index fb2a3b3..f3d1ecf 100644 --- a/src/ffi.c +++ b/src/ffi.c @@ -1,16 +1,6 @@ #include #include "../libvt100/src/vt100.h" -int vt100_wrapper_rows(VT100Screen *vt) -{ - return vt->grid->max.row; -} - -int vt100_wrapper_cols(VT100Screen *vt) -{ - return vt->grid->max.col; -} - int vt100_wrapper_cell_is_wide(struct vt100_cell *cell) { return cell->is_wide; diff --git a/src/ffi.rs b/src/ffi.rs index 550e3b0..4586bcd 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -38,8 +38,6 @@ extern "C" { col: libc::c_int, ) -> *mut types::CellImpl; - pub fn vt100_wrapper_rows(screen: *mut types::ScreenImpl) -> libc::c_int; - pub fn vt100_wrapper_cols(screen: *mut types::ScreenImpl) -> libc::c_int; pub fn vt100_wrapper_cell_is_wide(cell: *mut types::CellImpl) -> libc::c_int; pub fn vt100_wrapper_cell_bold(cell: *mut types::CellImpl) -> libc::c_int; pub fn vt100_wrapper_cell_italic(cell: *mut types::CellImpl) -> libc::c_int; diff --git a/src/screen.rs b/src/screen.rs index d3e026f..074feff 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -7,6 +7,17 @@ use types; pub struct Screen(*mut types::ScreenImpl); +#[repr(C)] +struct ScreenGridPrefix { + cur: types::Loc, + max: types::Loc, +} + +#[repr(C)] +struct ScreenImplPrefix { + grid: *mut ScreenGridPrefix, +} + impl Screen { pub fn new(rows: i32, cols: i32) -> Screen { let screen_impl = unsafe { @@ -17,12 +28,18 @@ impl Screen { pub fn rows(&self) -> i32 { let Screen(screen_impl) = *self; - unsafe { ffi::vt100_wrapper_rows(screen_impl) } + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + unsafe { (*(*prefix).grid).max.row } } pub fn cols(&self) -> i32 { let Screen(screen_impl) = *self; - unsafe { ffi::vt100_wrapper_cols(screen_impl) } + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + unsafe { (*(*prefix).grid).max.col } } pub fn set_window_size(&self, rows: i32, cols: i32) { -- cgit v1.2.3-54-g00ecf