aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-12-04 13:52:22 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-12-04 13:52:22 +0200
commitc82a3bcdac78bafbe7d7e686e083562253fd04d2 (patch)
tree57f7ad151fa7d94b9c204446be8f9133833b9f85 /src
parentfd4049183f9e86e061c8fe440c133451116fc7e2 (diff)
downloadrex-c82a3bcdac78bafbe7d7e686e083562253fd04d2.tar.xz
rex-c82a3bcdac78bafbe7d7e686e083562253fd04d2.zip
Removed Uncessary String and replaced them with &str
Diffstat (limited to 'src')
-rwxr-xr-xsrc/main.rs4
-rw-r--r--src/nfa.rs6
-rw-r--r--src/regex.rs25
3 files changed, 13 insertions, 22 deletions
diff --git a/src/main.rs b/src/main.rs
index 0f64a7e..b6033c1 100755
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,9 +4,9 @@ use nfa::*;
use regex::*;
fn test(regex: &str, input: &str) -> bool {
- let regex = Regex::new(String::from(regex));
+ let regex = Regex::new(regex);
let nfa = NFA::from(regex);
- nfa.matches(String::from(input))
+ nfa.matches(input)
}
fn main() {
diff --git a/src/nfa.rs b/src/nfa.rs
index 3fc890c..4757b83 100644
--- a/src/nfa.rs
+++ b/src/nfa.rs
@@ -153,7 +153,7 @@ impl NFA {
result
}
- pub fn matches(&self, input: String) -> bool {
+ pub fn matches(&self, input: &str) -> bool {
let chars = input.chars();
self.matches_helper(self.states.get(&self.initial_state).unwrap(), chars)
}
@@ -165,12 +165,12 @@ mod tests {
use crate::regex::Regex;
fn test(regex: &str, input: &str) -> bool {
- let token = Regex::new(String::from(regex));
+ let token = Regex::new(regex);
let mut nfa = NFA::new();
nfa.regex_to_nfa(token);
let mut x: Vec<(&usize, &State)> = nfa.states.iter().map(|(k, v)| (k, v)).collect();
x.sort();
- nfa.matches(String::from(input))
+ nfa.matches(input)
}
#[test]
diff --git a/src/regex.rs b/src/regex.rs
index 2ef4c16..6d05a54 100644
--- a/src/regex.rs
+++ b/src/regex.rs
@@ -44,11 +44,11 @@ pub enum Regex {
}
impl Regex {
- pub fn new(input: String) -> Regex {
+ pub fn new(input: &str) -> Regex {
Regex::parse(input)
}
- fn parse(input: String) -> Regex {
+ fn parse(input: &str) -> Regex {
if input.is_empty() {
return Regex::None;
}
@@ -102,7 +102,7 @@ impl Regex {
fn parse_token(chars: &mut std::iter::Peekable<std::str::Chars>) -> Regex {
match chars.next() {
Some('(') => {
- let token = Self::parse(chars.collect());
+ let token = Self::parse(&chars.into_iter().collect::<String>());
chars.next(); // Skip ')'
token
}
@@ -119,38 +119,29 @@ mod tests {
#[test]
fn test_concat() {
- assert_eq!(
- Regex::new(String::from("ab")),
- Concat!(Sym!('a'), Sym!('b'))
- )
+ assert_eq!(Regex::new("ab"), Concat!(Sym!('a'), Sym!('b')))
}
#[test]
fn test_plus() {
assert_eq!(
- Regex::new(String::from("(a|b)+c")),
+ Regex::new("(a|b)+c"),
Concat!(Plus!(Union!(Sym!('a'), Sym!('b'))), Sym!('c'))
)
}
#[test]
fn test_union() {
- assert_eq!(
- Regex::new(String::from("(a|b)")),
- Union!(Sym!('a'), Sym!('b'))
- )
+ assert_eq!(Regex::new("(a|b)"), Union!(Sym!('a'), Sym!('b')))
}
#[test]
fn test_none() {
- assert_eq!(Regex::new(String::from("")), Regex::None)
+ assert_eq!(Regex::new(""), Regex::None)
}
#[test]
fn test_star() {
- assert_eq!(
- Regex::new(String::from("a*b")),
- Concat!(Star!(Sym!('a')), Sym!('b'))
- )
+ assert_eq!(Regex::new("a*b"), Concat!(Star!(Sym!('a')), Sym!('b')))
}
}