mirror of
https://github.com/italicsjenga/gba.git
synced 2024-12-23 19:01:30 +11:00
more const!
This commit is contained in:
parent
d0b44e7390
commit
d62fbae4f0
|
@ -11,7 +11,7 @@ rust:
|
|||
|
||||
before_script:
|
||||
- rustup component add rust-src
|
||||
#- rustup component add clippy --toolchain=nightly
|
||||
- rustup component add clippy --toolchain=nightly
|
||||
- (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
|
||||
- (test -x $HOME/.cargo/bin/cargo-xbuild || cargo install cargo-xbuild)
|
||||
- (test -x $HOME/.cargo/bin/cargo-make || cargo install cargo-make)
|
||||
|
|
|
@ -15,10 +15,6 @@ publish = false
|
|||
typenum = "1.10"
|
||||
gba-proc-macro = "0.5"
|
||||
|
||||
#[dev-dependencies]
|
||||
#quickcheck="0.7"
|
||||
# TODO: F
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
panic = "abort"
|
||||
|
|
|
@ -118,8 +118,7 @@ impl<T> VolAddress<T> {
|
|||
/// # Safety
|
||||
///
|
||||
/// You must follow the standard safety rules as outlined in the type docs.
|
||||
pub unsafe fn offset(self, offset: isize) -> Self {
|
||||
// TODO: const this
|
||||
pub const unsafe fn offset(self, offset: isize) -> Self {
|
||||
VolAddress {
|
||||
address: NonZeroUsize::new_unchecked(self.address.get().wrapping_add(offset as usize * core::mem::size_of::<T>())),
|
||||
marker: PhantomData,
|
||||
|
@ -135,8 +134,7 @@ impl<T> VolAddress<T> {
|
|||
/// from the operation or throw a `debug_assert!` or something instead of
|
||||
/// triggering UB. Eventually this will be `const fn`, which will potentially
|
||||
/// let you spot errors without even having to run your program.
|
||||
pub fn is_aligned(self) -> bool {
|
||||
// TODO: const this
|
||||
pub const fn is_aligned(self) -> bool {
|
||||
self.address.get() % core::mem::align_of::<T>() == 0
|
||||
}
|
||||
|
||||
|
@ -276,8 +274,7 @@ impl<T> VolAddressBlock<T> {
|
|||
/// # Safety
|
||||
///
|
||||
/// The slot given must be in bounds.
|
||||
pub unsafe fn index_unchecked(self, slot: usize) -> VolAddress<T> {
|
||||
// TODO: const this
|
||||
pub const unsafe fn index_unchecked(self, slot: usize) -> VolAddress<T> {
|
||||
self.vol_address.offset(slot as isize)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,10 +2,9 @@
|
|||
#![feature(asm)]
|
||||
#![feature(const_int_wrapping)]
|
||||
#![feature(const_int_rotate)]
|
||||
#![feature(min_const_unsafe_fn)]
|
||||
#![warn(missing_docs)]
|
||||
#![allow(clippy::cast_lossless)]
|
||||
#![deny(clippy::float_arithmetic)]
|
||||
#![warn(missing_docs)]
|
||||
|
||||
//! This crate helps you write GBA ROMs.
|
||||
//!
|
||||
|
|
|
@ -37,15 +37,13 @@ pub const PALRAM_BG: VolAddressBlock<Color> = unsafe { VolAddressBlock::new_unch
|
|||
pub const PALRAM_OBJ: VolAddressBlock<Color> = unsafe { VolAddressBlock::new_unchecked(VolAddress::new_unchecked(0x500_0200), 256) };
|
||||
|
||||
/// Obtains the address of the specified 8bpp background palette slot.
|
||||
pub fn index_palram_bg_8bpp(slot: u8) -> VolAddress<Color> {
|
||||
// TODO: const this
|
||||
pub const fn index_palram_bg_8bpp(slot: u8) -> VolAddress<Color> {
|
||||
// Note(Lokathor): because of the `u8` limit we can't go out of bounds here.
|
||||
unsafe { PALRAM_BG.index_unchecked(slot as usize) }
|
||||
}
|
||||
|
||||
/// Obtains the address of the specified 8bpp object palette slot.
|
||||
pub fn index_palram_obj_8bpp(slot: u8) -> VolAddress<Color> {
|
||||
// TODO: const this
|
||||
pub const fn index_palram_obj_8bpp(slot: u8) -> VolAddress<Color> {
|
||||
// Note(Lokathor): because of the `u8` limit we can't go out of bounds here.
|
||||
unsafe { PALRAM_OBJ.index_unchecked(slot as usize) }
|
||||
}
|
||||
|
@ -54,8 +52,7 @@ pub fn index_palram_obj_8bpp(slot: u8) -> VolAddress<Color> {
|
|||
///
|
||||
/// Accesses `palbank * 16 + palslot`, if this is out of bounds the computation
|
||||
/// will wrap.
|
||||
pub fn index_palram_bg_4bpp(palbank: u8, palslot: u8) -> VolAddress<Color> {
|
||||
// TODO: const this
|
||||
pub const fn index_palram_bg_4bpp(palbank: u8, palslot: u8) -> VolAddress<Color> {
|
||||
// Note(Lokathor): because of the `u8` limit we can't go out of bounds here.
|
||||
unsafe { PALRAM_BG.index_unchecked(palbank.wrapping_mul(16).wrapping_add(palslot) as usize) }
|
||||
}
|
||||
|
@ -64,8 +61,7 @@ pub fn index_palram_bg_4bpp(palbank: u8, palslot: u8) -> VolAddress<Color> {
|
|||
///
|
||||
/// Accesses `palbank * 16 + palslot`, if this is out of bounds the computation
|
||||
/// will wrap.
|
||||
pub fn index_palram_obj_4bpp(palbank: u8, palslot: u8) -> VolAddress<Color> {
|
||||
// TODO: const this
|
||||
pub const fn index_palram_obj_4bpp(palbank: u8, palslot: u8) -> VolAddress<Color> {
|
||||
// Note(Lokathor): because of the `u8` limit we can't go out of bounds here.
|
||||
unsafe { PALRAM_OBJ.index_unchecked(palbank.wrapping_mul(16).wrapping_add(palslot) as usize) }
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue