File tree Expand file tree Collapse file tree 1 file changed +31
-2
lines changed Expand file tree Collapse file tree 1 file changed +31
-2
lines changed Original file line number Diff line number Diff line change 22//! Module containing nom parser combinators
33//!
44
5- use std:: str;
5+ use std:: { collections :: HashMap , str} ;
66
77use nom:: {
88 branch:: { alt, permutation} ,
@@ -1755,6 +1755,35 @@ fn signal_groups(s: &str) -> IResult<&str, SignalGroups> {
17551755 ) )
17561756}
17571757
1758+ fn deduplicate_value_description_names (
1759+ mut value_descriptions : Vec < ValueDescription > ,
1760+ ) -> Vec < ValueDescription > {
1761+ for desc in & mut value_descriptions {
1762+ if let ValueDescription :: Signal {
1763+ message_id : _,
1764+ signal_name : _,
1765+ value_descriptions,
1766+ } = desc
1767+ {
1768+ let mut name_count = HashMap :: < String , i32 > :: new ( ) ;
1769+
1770+ for val_desc in value_descriptions {
1771+ let count_entry = name_count. entry ( val_desc. b . clone ( ) ) . or_default ( ) ;
1772+ * count_entry += 1 ;
1773+
1774+ if * count_entry > 1 {
1775+ let mut old_name = String :: new ( ) ;
1776+ std:: mem:: swap ( & mut val_desc. b , & mut old_name) ;
1777+
1778+ val_desc. b = format ! ( "{old_name}{count_entry}" )
1779+ }
1780+ }
1781+ }
1782+ }
1783+
1784+ value_descriptions
1785+ }
1786+
17581787pub fn dbc ( s : & str ) -> IResult < & str , DBC > {
17591788 let (
17601789 s,
@@ -1818,7 +1847,7 @@ pub fn dbc(s: &str) -> IResult<&str, DBC> {
18181847 attribute_definitions,
18191848 attribute_defaults,
18201849 attribute_values,
1821- value_descriptions,
1850+ value_descriptions : deduplicate_value_description_names ( value_descriptions ) ,
18221851 signal_type_refs,
18231852 signal_groups,
18241853 signal_extended_value_type_list,
You can’t perform that action at this time.
0 commit comments