Use qload/qstore

This commit is contained in:
2022-06-02 08:25:47 +00:00
committed by GitHub
parent 36658a3753
commit 1f04bab3f4
4 changed files with 21 additions and 19 deletions

View File

@@ -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(())
}
}

View File

@@ -17,9 +17,11 @@ pub trait AtomicQuick<T> {
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)
}

View File

@@ -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
}

View File

@@ -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<NonTailList<Duration>>> {
@@ -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