1use std::ops::Range;
2use crate::*;
3use super::Wrap;
4
5impl<'a, Pe32: pe32::Pe<'a>, Pe64: pe64::Pe<'a>> Wrap<pe32::scanner::Scanner<Pe32>, pe64::scanner::Scanner<Pe64>> {
7 #[inline]
9 pub fn finds(&self, pat: &[pattern::Atom], range: Range<u32>, save: &mut [u32]) -> bool {
10 match self {
11 Wrap::T32(scanner) => scanner.finds(pat, range, save),
12 Wrap::T64(scanner) => scanner.finds(pat, range, save),
13 }
14 }
15 #[inline]
17 pub fn finds_code(&self, pat: &[pattern::Atom], save: &mut [u32]) -> bool {
18 match self {
19 Wrap::T32(scanner) => scanner.finds_code(pat, save),
20 Wrap::T64(scanner) => scanner.finds_code(pat, save),
21 }
22 }
23 #[inline]
25 pub fn matches<'pat>(&self, pat: &'pat [pattern::Atom], range: Range<u32>) -> Wrap<pe32::scanner::Matches<'pat, Pe32>, pe64::scanner::Matches<'pat, Pe64>> {
26 match self {
27 Wrap::T32(scanner) => Wrap::T32(scanner.matches(pat, range)),
28 Wrap::T64(scanner) => Wrap::T64(scanner.matches(pat, range)),
29 }
30 }
31 #[inline]
33 pub fn matches_code<'pat>(&self, pat: &'pat [pattern::Atom]) -> Wrap<pe32::scanner::Matches<'pat, Pe32>, pe64::scanner::Matches<'pat, Pe64>> {
34 match self {
35 Wrap::T32(scanner) => Wrap::T32(scanner.matches_code(pat)),
36 Wrap::T64(scanner) => Wrap::T64(scanner.matches_code(pat)),
37 }
38 }
39 #[inline]
41 pub fn exec(&self, cursor: u32, pat: &[pattern::Atom], save: &mut [u32]) -> bool {
42 match self {
43 Wrap::T32(scanner) => scanner.exec(cursor, pat, save),
44 Wrap::T64(scanner) => scanner.exec(cursor, pat, save),
45 }
46 }
47}
48
49impl<'a, 'pat, Pe32: pe32::Pe<'a>, Pe64: pe64::Pe<'a>> Wrap<pe32::scanner::Matches<'pat, Pe32>, pe64::scanner::Matches<'pat, Pe64>> {
50 #[inline]
52 pub fn scanner(&self) -> Wrap<pe32::scanner::Scanner<Pe32>, pe64::scanner::Scanner<Pe64>> {
53 match self {
54 Wrap::T32(matches) => Wrap::T32(matches.scanner()),
55 Wrap::T64(matches) => Wrap::T64(matches.scanner()),
56 }
57 }
58 #[inline]
60 pub fn pattern(&self) -> &'pat [pattern::Atom] {
61 match self {
62 Wrap::T32(matches) => matches.pattern(),
63 Wrap::T64(matches) => matches.pattern(),
64 }
65 }
66 #[inline]
68 pub fn range(&self) -> Range<u32> {
69 match self {
70 Wrap::T32(matches) => matches.range(),
71 Wrap::T64(matches) => matches.range(),
72 }
73 }
74 #[inline]
76 pub fn hits(&self) -> u32 {
77 match self {
78 Wrap::T32(matches) => matches.hits(),
79 Wrap::T64(matches) => matches.hits(),
80 }
81 }
82 #[inline]
84 pub fn next(&mut self, save: &mut [u32]) -> bool {
85 match self {
86 Wrap::T32(matches) => matches.next(save),
87 Wrap::T64(matches) => matches.next(save),
88 }
89 }
90}