diff --git a/src/downloader/pd_file/file.rs b/src/downloader/pd_file/file.rs index 1c7d791..df749e4 100644 --- a/src/downloader/pd_file/file.rs +++ b/src/downloader/pd_file/file.rs @@ -4,6 +4,7 @@ use crate::downloader::pd_file::enums::PdFileStatus; use crate::downloader::pd_file::enums::PdFileType; use crate::downloader::pd_file::part_status::PdFilePartStatus; use crate::downloader::pd_file::version::PdFileVersion; +use crate::ext::atomic::AtomicQuick; use crate::ext::io::StructRead; use crate::ext::replace::ReplaceWith2; use crate::ext::rw_lock::GetRwLock; @@ -30,7 +31,6 @@ use std::sync::RwLock; use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicU32; use std::sync::atomic::AtomicU64; -use std::sync::atomic::Ordering; lazy_static! { #[doc(hidden)] @@ -108,7 +108,7 @@ impl PdFile { #[inline] /// Returns the size of the downloaded data pub fn get_downloaded_file_size(&self) -> u64 { - self.downloaded_file_size.load(Ordering::Relaxed) + self.downloaded_file_size.qload() } /// Return status data of a part @@ -137,7 +137,7 @@ impl PdFile { #[inline] /// Returns true if stored in memory only. fn is_mem_only(&self) -> bool { - self.mem_only.load(Ordering::Relaxed) + self.mem_only.qload() } #[inline] @@ -149,7 +149,7 @@ impl PdFile { #[inline] /// Returns true if needed to save to file. fn is_need_saved(&self) -> bool { - self.need_saved.load(Ordering::Relaxed) + self.need_saved.qload() } /// Open a new [PdFile] if download is needed. @@ -237,8 +237,8 @@ impl PdFile { let f = File::create(p)?; self.file.get_mut().replace(f); self.file_path.get_mut().replace(PathBuf::from(p)); - self.mem_only.store(false, Ordering::Relaxed); - self.need_saved.store(true, Ordering::Relaxed); + self.mem_only.qstore(false); + self.need_saved.qstore(true); Ok(()) } @@ -280,7 +280,7 @@ impl PdFile { } else { self.file_name.get_mut().replace(String::from(fname)); if !self.is_mem_only() { - self.need_saved.store(true, Ordering::Relaxed); + self.need_saved.qstore(true); // Rewrite all datas. self.write()?; } @@ -301,11 +301,11 @@ impl PdFile { f.write_all(&self.status.get_ref().int_value().to_le_bytes())?; let ftype = self.ftype.get_ref(); f.write_all(&ftype.int_value().to_le_bytes())?; - let file_size = self.file_size.load(Ordering::Relaxed); + let file_size = self.file_size.qload(); f.write_all(&file_size.to_le_bytes())?; - f.write_all(&self.downloaded_file_size.load(Ordering::Relaxed).to_le_bytes())?; + f.write_all(&self.downloaded_file_size.qload().to_le_bytes())?; let part_size = if ftype.is_multi() { - self.part_size.load(Ordering::Relaxed) + self.part_size.qload() } else { 0 }; @@ -320,7 +320,7 @@ impl PdFile { } } } - self.need_saved.store(false, Ordering::Relaxed); + self.need_saved.qstore(false); Ok(()) } } diff --git a/src/ext/atomic.rs b/src/ext/atomic.rs index 142d114..ba83b01 100644 --- a/src/ext/atomic.rs +++ b/src/ext/atomic.rs @@ -17,9 +17,11 @@ pub trait AtomicQuick { macro_rules! impl_atomic_quick_with_atomic { ($type1:ty, $type2:ty) => { impl AtomicQuick<$type2> for $type1 { + #[inline] fn qload(&self) -> $type2 { self.load(Ordering::Relaxed) } + #[inline] fn qstore(&self, value: $type2) { self.store(value, Ordering::Relaxed) } diff --git a/src/pixiv_web.rs b/src/pixiv_web.rs index d70351e..f38a791 100644 --- a/src/pixiv_web.rs +++ b/src/pixiv_web.rs @@ -1,4 +1,5 @@ use crate::downloader::pd_file::PdFile; +use crate::ext::atomic::AtomicQuick; use crate::ext::rw_lock::GetRwLock; use crate::gettext; use crate::opthelper::get_helper; @@ -13,7 +14,6 @@ use std::sync::RwLock; use std::sync::RwLockReadGuard; use std::sync::RwLockWriteGuard; use std::sync::atomic::AtomicBool; -use std::sync::atomic::Ordering; use std::time::Duration; /// A client which use Pixiv's web API @@ -68,7 +68,7 @@ impl PixivWebClient { } pub fn is_inited(&self) -> bool { - self.inited.load(Ordering::Relaxed) + self.inited.qload() } pub fn init(&self) -> bool { @@ -88,7 +88,7 @@ impl PixivWebClient { self.client.set_header("Accept-Language", "ja"); self.params.get_mut().replace(json::object! { "lang": "ja" }); } - self.inited.store(true, Ordering::Relaxed); + self.inited.qstore(true); true } diff --git a/src/webclient.rs b/src/webclient.rs index d45faf5..a72e937 100644 --- a/src/webclient.rs +++ b/src/webclient.rs @@ -2,6 +2,7 @@ extern crate spin_on; use crate::cookies::Cookie; use crate::cookies::CookieJar; +use crate::ext::atomic::AtomicQuick; use crate::ext::json::ToJson; use crate::gettext; use crate::list::NonTailList; @@ -27,7 +28,6 @@ use std::sync::RwLockReadGuard; use std::sync::RwLockWriteGuard; use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicU64; -use std::sync::atomic::Ordering; use std::time::Duration; /// Convert data to HTTP headers map @@ -178,7 +178,7 @@ impl WebClient { /// return retry times, 0 means disable pub fn get_retry(&self) -> u64 { - self.retry.load(Ordering::Relaxed) + self.retry.qload() } pub async fn aget_retry_interval_as_mut<'a>(&'a self) -> RwLockWriteGuard<'a, Option>> { @@ -212,7 +212,7 @@ impl WebClient { } pub fn get_verbose(&self) -> bool { - self.verbose.load(Ordering::Relaxed) + self.verbose.qload() } /// Used to handle Set-Cookie header in an [Response] @@ -276,11 +276,11 @@ impl WebClient { /// Set retry times, 0 means disable pub fn set_retry(&self, retry: u64) { - self.retry.store(retry, Ordering::Relaxed) + self.retry.qstore(retry) } pub fn set_verbose(&self, verbose: bool) { - self.verbose.store(verbose, Ordering::Relaxed) + self.verbose.qstore(verbose) } /// Send GET requests with parameters