|
19 | 19 |
|
20 | 20 | namespace cpp2rust { |
21 | 21 | std::unordered_map<std::string, std::string> Converter::inner_structs_; |
22 | | -std::unordered_set<std::string> Converter::record_decls_; |
23 | 22 | std::unordered_set<std::string> Converter::decl_ids_; |
24 | 23 | std::unordered_set<std::string> Converter::globals_; |
25 | 24 | std::unordered_set<std::string> Converter::abstract_structs_; |
26 | | -std::unordered_map<std::string, std::string> Converter::referenced_records_; |
| 25 | +Converter::RecordIndex Converter::record_decls_; |
27 | 26 |
|
28 | 27 | void Converter::ConvertUniquePtrDeref(clang::CXXOperatorCallExpr *expr) { |
29 | 28 | bool is_star = expr->getOperator() == clang::OverloadedOperatorKind::OO_Star; |
@@ -56,14 +55,11 @@ use std::rc::Rc; |
56 | 55 |
|
57 | 56 | std::string Converter::EmitOpaqueRecordMarkers() { |
58 | 57 | std::string out; |
59 | | - for (const auto &[id, name] : referenced_records_) { |
60 | | - if (record_decls_.contains(id)) { |
61 | | - continue; |
62 | | - } |
| 58 | + record_decls_.ForEachUndefined([&](const std::string &name) { |
63 | 59 | out += "#[repr(C)] pub struct "; |
64 | 60 | out += name; |
65 | 61 | out += " { _opaque: [u8; 0] }\n"; |
66 | | - } |
| 62 | + }); |
67 | 63 | return out; |
68 | 64 | } |
69 | 65 |
|
@@ -177,7 +173,7 @@ bool Converter::VisitRecordType(clang::RecordType *type) { |
177 | 173 | auto name = GetRecordName(decl); |
178 | 174 | StrCat(name); |
179 | 175 | if (!ctx_.getSourceManager().isInSystemHeader(decl->getLocation())) { |
180 | | - referenced_records_.try_emplace(GetID(decl), std::move(name)); |
| 176 | + record_decls_.MarkReferenced(std::move(name)); |
181 | 177 | } |
182 | 178 | Mapper::AddRuleForUserDefinedType(decl); |
183 | 179 | return false; |
@@ -635,7 +631,7 @@ bool Converter::VisitRecordDecl(clang::RecordDecl *decl) { |
635 | 631 | return false; |
636 | 632 | } |
637 | 633 |
|
638 | | - if (!record_decls_.insert(GetID(decl)).second) { |
| 634 | + if (!record_decls_.MarkDefined(GetRecordName(decl))) { |
639 | 635 | return false; |
640 | 636 | } |
641 | 637 |
|
@@ -752,7 +748,7 @@ bool Converter::VisitCXXRecordDecl(clang::CXXRecordDecl *decl) { |
752 | 748 | } |
753 | 749 | } |
754 | 750 |
|
755 | | - if (!record_decls_.insert(GetID(decl)).second) { |
| 751 | + if (!record_decls_.MarkDefined(GetRecordName(decl))) { |
756 | 752 | return false; |
757 | 753 | } |
758 | 754 |
|
|
0 commit comments