From 815e309618145d19ed1ec5fa98ae24d577238306 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Sat, 9 Jun 2018 02:26:14 +0100 Subject: [PATCH 1/2] Improve code generation when comparing log levels --- src/lib.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 60250d9fd..7f923bd0b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -375,6 +375,26 @@ impl PartialOrd for Level { fn partial_cmp(&self, other: &Level) -> Option { Some(self.cmp(other)) } + + #[inline] + fn lt(&self, other: &Level) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &Level) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &Level) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &Level) -> bool { + *self as usize >= *other as usize + } } impl PartialOrd for Level { @@ -382,6 +402,26 @@ impl PartialOrd for Level { fn partial_cmp(&self, other: &LevelFilter) -> Option { Some((*self as usize).cmp(&(*other as usize))) } + + #[inline] + fn lt(&self, other: &LevelFilter) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &LevelFilter) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &LevelFilter) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &LevelFilter) -> bool { + *self as usize >= *other as usize + } } impl Ord for Level { @@ -517,12 +557,52 @@ impl PartialOrd for LevelFilter { fn partial_cmp(&self, other: &LevelFilter) -> Option { Some(self.cmp(other)) } + + #[inline] + fn lt(&self, other: &LevelFilter) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &LevelFilter) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &LevelFilter) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &LevelFilter) -> bool { + *self as usize >= *other as usize + } } impl PartialOrd for LevelFilter { #[inline] fn partial_cmp(&self, other: &Level) -> Option { - other.partial_cmp(self).map(|x| x.reverse()) + Some((*self as usize).cmp(&(*other as usize))) + } + + #[inline] + fn lt(&self, other: &Level) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &Level) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &Level) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &Level) -> bool { + *self as usize >= *other as usize } } From 8d79b7476f5f0e64f22c695930d05a993ad0630d Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Sat, 9 Jun 2018 02:27:07 +0100 Subject: [PATCH 2/2] Further improve code size for log macros --- src/lib.rs | 5 +---- src/macros.rs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 7f923bd0b..913864fba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1221,10 +1221,7 @@ pub fn logger() -> &'static Log { pub fn __private_api_log( args: fmt::Arguments, level: Level, - target: &str, - module_path: &str, - file: &str, - line: u32, + &(target, module_path, file, line): &(&str, &str, &str, u32), ) { logger().log( &Record::builder() diff --git a/src/macros.rs b/src/macros.rs index 3c7867f85..cff938492 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -37,10 +37,7 @@ macro_rules! log { $crate::__private_api_log( format_args!($($arg)+), lvl, - $target, - module_path!(), - file!(), - line!(), + &($target, module_path!(), file!(), line!()), ); } });