rstm_core/traits/
symbols.rs1pub trait Alphabet {
14 type Elem;
15
16 fn as_slice(&self) -> &[Self::Elem];
17
18 fn as_mut_slice(&mut self) -> &mut [Self::Elem];
19
20 fn is_empty(&self) -> bool {
21 self.len() == 0
22 }
23
24 fn len(&self) -> usize {
25 self.as_slice().len()
26 }
27
28 fn to_vec(&self) -> Vec<Self::Elem>;
29}
30
31pub trait Symbolic
35where
36 Self: Clone
37 + Copy
38 + Default
39 + Eq
40 + Ord
41 + PartialEq
42 + PartialOrd
43 + core::fmt::Debug
44 + core::fmt::Display
45 + core::hash::Hash
46 + Send
47 + Sync
48 + 'static,
49{
50}
51
52#[cfg(feature = "alloc")]
56use alloc::vec::Vec;
57
58impl<S: Symbolic> Alphabet for [S] {
59 type Elem = S;
60
61 fn as_slice(&self) -> &[S] {
62 self
63 }
64
65 fn as_mut_slice(&mut self) -> &mut [S] {
66 self
67 }
68
69 fn is_empty(&self) -> bool {
70 self.is_empty()
71 }
72
73 fn len(&self) -> usize {
74 self.len()
75 }
76
77 fn to_vec(&self) -> Vec<S> {
78 self.to_vec()
79 }
80}
81
82#[cfg(feature = "alloc")]
83impl<S: Symbolic> Alphabet for Vec<S> {
84 type Elem = S;
85
86 fn as_slice(&self) -> &[S] {
87 self.as_slice()
88 }
89
90 fn as_mut_slice(&mut self) -> &mut [S] {
91 self.as_mut_slice()
92 }
93
94 fn is_empty(&self) -> bool {
95 self.is_empty()
96 }
97
98 fn len(&self) -> usize {
99 self.len()
100 }
101
102 fn to_vec(&self) -> Vec<S> {
103 self.clone()
104 }
105}
106
107impl<S> Symbolic for S where
108 S: Copy
109 + Default
110 + Eq
111 + Ord
112 + core::fmt::Debug
113 + core::fmt::Display
114 + core::hash::Hash
115 + Send
116 + Sync
117 + 'static
118{
119}