From 7ad9c73c7523d3183ec4e84ed4b66a9abeac741a Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 2 Jun 2016 11:51:03 +0200 Subject: [PATCH] devtools helpers extended (#1186) * devtools extensions * some doc effort --- devtools/src/lib.rs | 2 ++ devtools/src/random_path.rs | 12 +++++++++- devtools/src/stop_guard.rs | 45 +++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 devtools/src/stop_guard.rs diff --git a/devtools/src/lib.rs b/devtools/src/lib.rs index 3ab585d93..e37d5c528 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 990d375e3..09bee7e45 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 000000000..f1db59725 --- /dev/null +++ b/devtools/src/stop_guard.rs @@ -0,0 +1,45 @@ +// 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 . + +//! 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() + } +} + +impl Drop for StopGuard { + fn drop(&mut self) { + self.flag.store(true, Ordering::Relaxed) + } +}