Skip to content

Commit 44cad6d

Browse files
committed
fix(cpp): add operator< to wit::string for std::map key support and fix rustfmt
wit::string lacked comparison operators, causing compilation failures when used as a std::map key. Also fixes rustfmt formatting issues.
1 parent 92ed57a commit 44cad6d

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

crates/cpp/helper-types/wit.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ class string {
107107
char const* end() const {
108108
return (char const*)data_ + length;
109109
}
110+
friend bool operator<(string const &a, string const &b) {
111+
return a.get_view() < b.get_view();
112+
}
113+
friend bool operator==(string const &a, string const &b) {
114+
return a.get_view() == b.get_view();
115+
}
110116
};
111117

112118
/// A vector in linear memory, freed unconditionally using free

crates/cpp/src/lib.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3590,21 +3590,16 @@ impl<'a, 'b> Bindgen for FunctionBindgen<'a, 'b> {
35903590
let tmp = self.tmp();
35913591
let entry = self.r#gen.sizes.record([*key, *value]);
35923592
let size = entry.size.format(POINTER_SIZE_EXPRESSION);
3593-
let key_type =
3594-
self.r#gen
3595-
.type_name(key, &self.namespace, Flavor::InStruct);
3596-
let value_type =
3597-
self.r#gen
3598-
.type_name(value, &self.namespace, Flavor::InStruct);
3593+
let key_type = self.r#gen.type_name(key, &self.namespace, Flavor::InStruct);
3594+
let value_type = self
3595+
.r#gen
3596+
.type_name(value, &self.namespace, Flavor::InStruct);
35993597
let len = format!("len{tmp}");
36003598
let base = format!("base{tmp}");
36013599
let result = format!("result{tmp}");
36023600
uwriteln!(self.src, "auto {base} = {};", operands[0]);
36033601
uwriteln!(self.src, "auto {len} = {};", operands[1]);
3604-
uwriteln!(
3605-
self.src,
3606-
"std::map<{key_type}, {value_type}> {result};"
3607-
);
3602+
uwriteln!(self.src, "std::map<{key_type}, {value_type}> {result};");
36083603
if self.r#gen.r#gen.opts.api_style == APIStyle::Symmetric
36093604
&& matches!(self.variant, AbiVariant::GuestExport)
36103605
{

0 commit comments

Comments
 (0)