1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//! A crate for escaping strings
//!
//! # Features
//!
//! - `std`: Enable standard library features
//! - `alloc`: Enable alloc crate features
//! - `string`: Enable `escape_string` function
//! - `fmt`: Enable `escape_fmt` function
//!
//! # Examples
//!
//! ```rust
//! use v_escape_base::{escape_builder, Escapes, EscapesBuilder, Vector};
//!
//! #[derive(Debug, Clone, Copy)]
//! struct Equal<V: Vector> {
//! a: V,
//! }
//!
//! struct Builder;
//! impl EscapesBuilder for Builder {
//! type Escapes<V: Vector> = Equal<V>;
//!
//! fn new<V: Vector>() -> Self::Escapes<V> {
//! Equal { a: V::splat(b'a') }
//! }
//! }
//!
//! impl<V: Vector> Escapes for Equal<V> {
//! const ESCAPE_LEN: usize = 1;
//!
//! const FALSE_POSITIVE: bool = false;
//!
//! type Vector = V;
//!
//! #[inline(always)]
//! fn masking(&self, vector2: V) -> V {
//! self.a.cmpeq(vector2)
//! }
//!
//! #[inline(always)]
//! fn escape(_: usize) -> &'static str {
//! "foo"
//! }
//!
//! #[inline(always)]
//! fn position(_: u8) -> usize {
//! 0
//! }
//!
//! #[inline(always)]
//! fn byte_byte_compare(c: u8) -> bool {
//! c == b'a'
//! }
//! }
//!
//! escape_builder!(Builder);
//!
//! let mut buffer = String::new();
//! let haystack = "a".repeat(64);
//! # #[cfg(feature = "string")]
//! escape_string(&haystack, &mut buffer);
//! # #[cfg(feature = "string")]
//! assert_eq!(buffer, "foo".repeat(64));
//!
//! let haystack = "a".repeat(64);
//! # #[cfg(feature = "fmt")]
//! assert_eq!(escape_fmt(&haystack).to_string(), "foo".repeat(64));
//! ```
/// A module for standard library
extern crate std;
/// A module for alloc crate
extern crate alloc;
/// A module for architecture-specific escape functions
/// A module for escapes
/// A module for extensions
/// A module for generic escape functions
pub use ;
pub use Vector;