about summary refs log tree commit diff
path: root/users/tazjin/german-string
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2024-08-16T17·14+0300
committertazjin <tazjin@tvl.su>2024-08-19T13·19+0000
commit2284c00417260c3aebb9f022629ded9a64a9ca7e (patch)
tree2ef976699e56feeaa9723ea8abff29fd8f393400 /users/tazjin/german-string
parent0714184b1fb74e7bd7f685ace098aacb07387edc (diff)
feat(tazjin/german-string): PartialEq implementation for GermanString r/8528
This is where one of the advantages of this string representation starts to
shine: For small strings there's no derefencing any heap memory at all, and for
the long representation we can compare the prefix before moving on.

Change-Id: Iac333a52e8d7c9dd09e33dbcf51754e321c880e6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12238
Reviewed-by: tazjin <tazjin@tvl.su>
Autosubmit: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Diffstat (limited to 'users/tazjin/german-string')
-rw-r--r--users/tazjin/german-string/src/lib.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/users/tazjin/german-string/src/lib.rs b/users/tazjin/german-string/src/lib.rs
index eb6d02f29131..cf315c9d5dce 100644
--- a/users/tazjin/german-string/src/lib.rs
+++ b/users/tazjin/german-string/src/lib.rs
@@ -100,6 +100,22 @@ impl Drop for GermanString {
     }
 }
 
+impl PartialEq for GermanString {
+    fn eq(&self, other: &GermanString) -> bool {
+        if self.len() != other.len() {
+            return false;
+        }
+
+        unsafe {
+            if self.len() <= 12 {
+                return self.0.small.data[..self.len()] == other.0.small.data[..other.len()];
+            }
+            return self.0.large.prefix == other.0.large.prefix
+                && self.as_bytes() == other.as_bytes();
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;