From 99fa32a4b0fe5c1159de5cfcd57cb3e17acbb528 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Tue, 31 May 2016 14:41:11 +0200 Subject: [PATCH 1/2] devtools extensions --- devtools/src/lib.rs | 2 ++ devtools/src/random_path.rs | 12 ++++++++++- devtools/src/stop_guard.rs | 42 +++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 devtools/src/stop_guard.rs diff --git a/devtools/src/lib.rs b/devtools/src/lib.rs index 3ab585d932b..e37d5c5281c 100644 --- a/devtools/src/lib.rs +++ b/devtools/src/lib.rs @@ -21,6 +21,8 @@ extern crate rand; pub mod random_path; pub mod test_socket; +pub mod stop_guard; pub use random_path::*; pub use test_socket::*; +pub use stop_guard::*; diff --git a/devtools/src/random_path.rs b/devtools/src/random_path.rs index 990d375e328..09bee7e4515 100644 --- a/devtools/src/random_path.rs +++ b/devtools/src/random_path.rs @@ -26,7 +26,11 @@ pub struct RandomTempPath { } pub fn random_filename() -> String { - (0..8).map(|_| ((random::() * 26.0) as u8 + 97) as char).collect() + random_str(8) +} + +pub fn random_str(len: usize) -> String { + (0..len).map(|_| ((random::() * 26.0) as u8 + 97) as char).collect() } impl RandomTempPath { @@ -54,6 +58,12 @@ impl RandomTempPath { pub fn as_str(&self) -> &str { self.path.to_str().unwrap() } + + pub fn new_in(&self, name: &str) -> String { + let mut path = self.path.clone(); + path.push(name); + path.to_str().unwrap().to_owned() + } } impl Drop for RandomTempPath { diff --git a/devtools/src/stop_guard.rs b/devtools/src/stop_guard.rs new file mode 100644 index 00000000000..481e62ac1eb --- /dev/null +++ b/devtools/src/stop_guard.rs @@ -0,0 +1,42 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Random path + +use std::sync::Arc; +use std::sync::atomic::*; + +pub struct StopGuard { + flag: Arc, +} + +impl StopGuard { + pub fn new() -> StopGuard { + StopGuard { + flag: Arc::new(AtomicBool::new(false)) + } + } + + pub fn share(&self) -> Arc { + self.flag.clone() + } +} + +impl Drop for StopGuard { + fn drop(&mut self) { + self.flag.store(true, Ordering::Relaxed) + } +} From 448606357898eb4a3e63ab3ae4b163c9a2679457 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Tue, 31 May 2016 15:37:52 +0200 Subject: [PATCH 2/2] some doc effort --- devtools/src/stop_guard.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/devtools/src/stop_guard.rs b/devtools/src/stop_guard.rs index 481e62ac1eb..f1db5972528 100644 --- a/devtools/src/stop_guard.rs +++ b/devtools/src/stop_guard.rs @@ -14,22 +14,25 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -//! Random path +//! Stop guard mod use std::sync::Arc; use std::sync::atomic::*; +/// Stop guard that will set a stop flag on drop pub struct StopGuard { flag: Arc, } impl StopGuard { + /// Create a stop guard pub fn new() -> StopGuard { StopGuard { flag: Arc::new(AtomicBool::new(false)) } } + /// Share stop guard between the threads pub fn share(&self) -> Arc { self.flag.clone() }