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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use crate::high_level_api::global_state::with_internal_keys;
use crate::high_level_api::keys::InternalServerKey;
use crate::high_level_api::re_randomization::ReRandomizationMetadata;
use crate::high_level_api::strings::ascii::FheAsciiString;
impl FheAsciiString {
/// Returns a new encrypted string with whitespace removed from the start.
///
/// # Example
///
/// ```rust
/// use tfhe::prelude::*;
/// use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheAsciiString};
///
/// let (client_key, server_key) = generate_keys(ConfigBuilder::default());
/// set_server_key(server_key);
///
/// let string = FheAsciiString::try_encrypt(" tfhe-rs ", &client_key).unwrap();
/// let trimmed = string.trim_start();
/// let dec = trimmed.decrypt(&client_key);
/// assert_eq!(&dec, "tfhe-rs ");
/// ```
pub fn trim_start(&self) -> Self {
with_internal_keys(|keys| match keys {
InternalServerKey::Cpu(cpu_key) => {
let inner = cpu_key.string_key().trim_start(&self.inner.on_cpu());
Self::new(
inner,
cpu_key.tag.clone(),
ReRandomizationMetadata::default(),
)
}
#[cfg(feature = "gpu")]
InternalServerKey::Cuda(_) => {
panic!("gpu does not support trim_start");
}
#[cfg(feature = "hpu")]
InternalServerKey::Hpu(_) => {
panic!("hpu does not support trim_start");
}
})
}
/// Returns a new encrypted string with whitespace removed from the end.
///
/// # Example
///
/// ```rust
/// use tfhe::prelude::*;
/// use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheAsciiString};
///
/// let (client_key, server_key) = generate_keys(ConfigBuilder::default());
/// set_server_key(server_key);
///
/// let string = FheAsciiString::try_encrypt(" tfhe-rs ", &client_key).unwrap();
/// let trimmed = string.trim_end();
/// let dec = trimmed.decrypt(&client_key);
/// assert_eq!(&dec, " tfhe-rs");
/// ```
pub fn trim_end(&self) -> Self {
with_internal_keys(|keys| match keys {
InternalServerKey::Cpu(cpu_key) => {
let inner = cpu_key.string_key().trim_end(&self.inner.on_cpu());
Self::new(
inner,
cpu_key.tag.clone(),
ReRandomizationMetadata::default(),
)
}
#[cfg(feature = "gpu")]
InternalServerKey::Cuda(_) => {
panic!("gpu does not support trim_end");
}
#[cfg(feature = "hpu")]
InternalServerKey::Hpu(_) => {
panic!("hpu does not support trim_end");
}
})
}
/// Returns a new encrypted string with whitespace removed from both the start and end.
///
/// # Example
///
/// ```rust
/// use tfhe::prelude::*;
/// use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheAsciiString};
///
/// let (client_key, server_key) = generate_keys(ConfigBuilder::default());
/// set_server_key(server_key);
///
/// let string = FheAsciiString::try_encrypt(" tfhe-rs ", &client_key).unwrap();
/// let trimmed = string.trim();
/// let dec = trimmed.decrypt(&client_key);
/// assert_eq!(&dec, "tfhe-rs");
/// ```
pub fn trim(&self) -> Self {
with_internal_keys(|keys| match keys {
InternalServerKey::Cpu(cpu_key) => {
let inner = cpu_key.string_key().trim(&self.inner.on_cpu());
Self::new(
inner,
cpu_key.tag.clone(),
ReRandomizationMetadata::default(),
)
}
#[cfg(feature = "gpu")]
InternalServerKey::Cuda(_) => {
panic!("gpu does not support trim");
}
#[cfg(feature = "hpu")]
InternalServerKey::Hpu(_) => {
panic!("hpu does not support trim");
}
})
}
}