From 2dd0c00c038ad38c8b153235beee3309e27a6b88 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 3 Apr 2021 11:47:58 +0800 Subject: [PATCH] feat: add regex --- __regex/hyperscan/Cargo.lock | 219 ++++++++++++++++++++++++++++++++++ __regex/hyperscan/Cargo.toml | 12 ++ __regex/hyperscan/README.md | 7 ++ __regex/hyperscan/src/main.rs | 18 +++ 4 files changed, 256 insertions(+) create mode 100644 __regex/hyperscan/Cargo.lock create mode 100644 __regex/hyperscan/Cargo.toml create mode 100644 __regex/hyperscan/README.md create mode 100644 __regex/hyperscan/src/main.rs diff --git a/__regex/hyperscan/Cargo.lock b/__regex/hyperscan/Cargo.lock new file mode 100644 index 0000000..98861ad --- /dev/null +++ b/__regex/hyperscan/Cargo.lock @@ -0,0 +1,219 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "anyhow" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "derive_more" +version = "0.99.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b1b72f1263f214c0f823371768776c4f5841b942c9883aa8e5ec584fd0ba6" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63f713f8b2aa9e24fec85b0e290c56caee12e3b6ae0aeeda238a75b28251afd6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7684cf33bb7f28497939e8c7cf17e3e4e3b8d9a0080ffa4f8ae2f515442ee855" + +[[package]] +name = "hyperscan" +version = "0.1.0" +dependencies = [ + "hyperscan 0.2.1", +] + +[[package]] +name = "hyperscan" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "776436c3ca3efe5b2018814dc9f3c10df5f59023fed9c5004efad675da7e0c4c" +dependencies = [ + "anyhow", + "bitflags", + "cfg-if", + "derive_more", + "foreign-types", + "hyperscan-sys", + "libc", + "malloc_buf", + "rustc_version", + "semver", + "thiserror", +] + +[[package]] +name = "hyperscan-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c23eb0ddda6cec8ca71a0db2b4876283426e43589411cd46b9a1f3dd1737ce" +dependencies = [ + "anyhow", + "libc", + "pkg-config", +] + +[[package]] +name = "libc" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d855069fafbb9b344c0f962150cd2c1187975cb1c22c1522c240d8c4986714" + +[[package]] +name = "malloc_buf" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f32c8c0575eee8637bf462087c00098fe16d6cb621f1abb6ebab4da414d57fd" +dependencies = [ + "libc", +] + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "proc-macro2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "syn" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ce15dd3ed8aa2f8eeac4716d6ef5ab58b6b9256db41d7e1a0224c2788e8fd87" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "thiserror" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" diff --git a/__regex/hyperscan/Cargo.toml b/__regex/hyperscan/Cargo.toml new file mode 100644 index 0000000..b739813 --- /dev/null +++ b/__regex/hyperscan/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "hyperscan" +version = "0.1.0" +authors = ["Hatter Jiang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hyperscan = "0.2" + + diff --git a/__regex/hyperscan/README.md b/__regex/hyperscan/README.md new file mode 100644 index 0000000..d63e4cd --- /dev/null +++ b/__regex/hyperscan/README.md @@ -0,0 +1,7 @@ + + +```shell +brew install hyperscan +``` + + diff --git a/__regex/hyperscan/src/main.rs b/__regex/hyperscan/src/main.rs new file mode 100644 index 0000000..54379cd --- /dev/null +++ b/__regex/hyperscan/src/main.rs @@ -0,0 +1,18 @@ +use hyperscan::prelude::*; + +fn main() { + let pattern = pattern! {"test"; CASELESS | SOM_LEFTMOST}; + let db: BlockDatabase = pattern.build().unwrap(); + let scratch = db.alloc_scratch().unwrap(); + let mut matches = vec![]; + + db.scan("some test data", &scratch, |id, from, to, _flags| { + println!("found pattern #{} @ [{}, {})", id, from, to); + + matches.push(from..to); + + Matching::Continue + }).unwrap(); + + assert_eq!(matches, vec![5..9]); +} \ No newline at end of file