diff --git a/src/gen.rs b/src/gen.rs index 96e780f..682d366 100644 --- a/src/gen.rs +++ b/src/gen.rs @@ -15,41 +15,6 @@ impl POWRange { } } -pub struct POWSolver { - challenge: POWChallenge -} - -impl POWSolver { - - /** - * Solve chunk with feedback. - * Feedback is a function that is being - * called at each iteration of a loop, - * which will be useful for progressbars - * and visual feedback. - * - * Example: - * ```rust - let challenge = POWChallenge::make(POWRange::new(0, 16)); - let num = POWSolver::new(challenge).chunk_solve_feedback(0, 16, |x| println!("{}", x)).unwrap(); - println!("Found number: {}", num) - * ``` - */ - pub fn chunk_solve_feedback(self: &POWSolver, start: u128, end: u128, callback: fn(u128)) -> Option { - for i in start..end { - callback(i); - if self.challenge.check(i.into()) { - return Some(i); - } - } - None - } - - pub fn new(challenge: POWChallenge) -> POWSolver { - POWSolver { challenge } - } -} - #[derive(Debug, Clone)] pub struct POWChallenge { hash: [u8; 32], @@ -78,6 +43,12 @@ impl POWChallenge { hash_num(num) == self.hash } + /** + Solve a chunk of numbers. + + This method is deprecated. Use `POWSolver` instead. + */ + #[deprecated] pub fn chunk_solve(self: &POWChallenge, start: u128, end: u128) -> Option { for i in start..end { if self.check(Num::new(i)) { @@ -87,6 +58,12 @@ impl POWChallenge { None } + /** + Solve the challenge. + + This method is deprecated. Use `POWSolver` instead. + */ + #[deprecated] pub fn solve_singlethread(self: &POWChallenge) -> u128 { match self.chunk_solve(self.range.min, self.range.max) { Some(v) => v, diff --git a/src/lib.rs b/src/lib.rs index 59700e0..ad59e61 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ pub mod gen; pub mod hash; pub mod num; +pub mod solver; \ No newline at end of file diff --git a/src/solver.rs b/src/solver.rs new file mode 100644 index 0000000..11d82fd --- /dev/null +++ b/src/solver.rs @@ -0,0 +1,59 @@ +use crate::gen::POWChallenge; + +pub struct POWSolver { + challenge: POWChallenge, + result: Option +} + +impl POWSolver { + + /** + Solve chunk with feedback. + Feedback is a function that is + being called at each iteration + of a loop, which will be useful + for progressbars and visual feedback. + + Example: + ```rust + let challenge = POWChallenge::make(POWRange::new(0, 16)); + let num = POWSolver::new(challenge).chunk_solve_feedback(0, 16, |x| println!("{}", x)).unwrap(); + println!("Found number: {}", num) + ``` + */ + pub fn chunk_solve_feedback(self: &mut POWSolver, start: u128, end: u128, callback: fn(u128)) -> Option { + for i in start..end { + callback(i); + if self.challenge.check(i.into()) { + self.result = Some(i); + return Some(i); + } + } + None + } + + /** + * Solve a chunk. + * This function is the same as `POWRange.chunk_solve`, the only difference is that it doesnt call a function each iteration which could possibly save some time + * + * Example: + * ```rust + let challenge = POWChallenge::make(POWRange::new(0, 16)); + let num = POWSolver::new(challenge).chunk_solve(0, 16).unwrap(); + println!("Found number: {}", num) + * ``` + */ + pub fn chunk_solve(self: &mut POWSolver, start: u128, end: u128) -> Option { + for i in start..end { + if self.challenge.check(i.into()) { + self.result = Some(i); + return Some(i); + } + } + None + } + + pub fn new(challenge: POWChallenge) -> POWSolver { + POWSolver { challenge, result: None } + } +} \ No newline at end of file