From d137415a69007a90569ebbf38a92424fba60b997 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Tue, 18 Dec 2018 00:39:15 +0100 Subject: Add argparse 0.2.2 as a dependency This patch adds the crate rust-argparse [0] in version 0.2.2 as a dependency, as discussed in issue #4. [0] https://github.com/tailhook/rust-argparse Import subrepo argparse/:argparse at 0de60a5e6d9ee1a3570d6089afd3ccd6ed7480c5 --- argparse/src/num.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 argparse/src/num.rs (limited to 'argparse/src/num.rs') diff --git a/argparse/src/num.rs b/argparse/src/num.rs new file mode 100644 index 0000000..9f34de7 --- /dev/null +++ b/argparse/src/num.rs @@ -0,0 +1,58 @@ +use std::cell::RefCell; +use std::rc::Rc; +use std::ops::{Add, Sub}; + +use super::{IncrBy, DecrBy}; +use super::action::{TypedAction, Action, ParseResult}; +use super::action::ParseResult::Parsed; +use super::action::IFlagAction; +use super::action::Action::Flag; + +pub struct IncrByAction<'a, T: 'a> { + delta: T, + cell: Rc>, +} + +pub struct DecrByAction<'a, T: 'a> { + delta: T, + cell: Rc>, +} + +impl + Clone> TypedAction for IncrBy { + fn bind<'x>(&self, cell: Rc>) -> Action<'x> { + let IncrBy(ref delta) = *self; + return Flag(Box::new(IncrByAction { cell: cell, delta: delta.clone() })); + } +} + +impl + Clone> TypedAction for DecrBy { + fn bind<'x>(&self, cell: Rc>) -> Action<'x> { + let DecrBy(ref delta) = *self; + return Flag(Box::new(DecrByAction { cell: cell, delta: delta.clone() })); + } +} + +impl<'a, T: Add + Clone> IFlagAction for IncrByAction<'a, T> { + fn parse_flag(&self) -> ParseResult { + let oldval = { + let targ = self.cell.borrow(); + targ.clone() + }; + let mut targ = self.cell.borrow_mut(); + **targ = oldval + self.delta.clone(); + return Parsed; + } +} + +impl<'a, T: Sub + Clone> IFlagAction for DecrByAction<'a, T> { + fn parse_flag(&self) -> ParseResult { + let oldval = { + let targ = self.cell.borrow(); + targ.clone() + }; + let mut targ = self.cell.borrow_mut(); + **targ = oldval - self.delta.clone(); + return Parsed; + } +} + -- cgit v1.2.1