File tree Expand file tree Collapse file tree 3 files changed +39
-8
lines changed Expand file tree Collapse file tree 3 files changed +39
-8
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ class Parser {
15
15
virtual ~Parser () = default ;
16
16
17
17
virtual void parse_file (const std::string& file) = 0;
18
+ virtual void parse_file (std::istream& file) = 0;
18
19
19
20
protected:
20
21
};
@@ -23,7 +24,8 @@ class DbcParser : public Parser {
23
24
public:
24
25
DbcParser ();
25
26
26
- void parse_file (const std::string& file) override ;
27
+ void parse_file (const std::string& file_name) override ;
28
+ void parse_file (std::istream& stream) override ;
27
29
28
30
std::string get_version () const ;
29
31
std::vector<std::string> get_nodes () const ;
Original file line number Diff line number Diff line change @@ -70,18 +70,12 @@ DbcParser::DbcParser()
70
70
+ whiteSpace + receiverPattern) {
71
71
}
72
72
73
- void DbcParser::parse_file (const std::string& file) {
74
- std::ifstream stream (file.c_str ());
73
+ void DbcParser::parse_file (std::istream& stream) {
75
74
std::string line;
76
75
std::vector<std::string> lines;
77
76
78
77
messages.clear ();
79
78
80
- auto extension = get_extension (file);
81
- if (extension != " .dbc" ) {
82
- throw NonDbcFileFormatError (file, extension);
83
- }
84
-
85
79
parse_dbc_header (stream);
86
80
parse_dbc_nodes (stream);
87
81
@@ -93,6 +87,17 @@ void DbcParser::parse_file(const std::string& file) {
93
87
parse_dbc_messages (lines);
94
88
}
95
89
90
+ void DbcParser::parse_file (const std::string& file_name) {
91
+ auto extension = get_extension (file_name);
92
+ if (extension != " .dbc" ) {
93
+ throw NonDbcFileFormatError (file_name, extension);
94
+ }
95
+
96
+ std::ifstream stream (file_name.c_str ());
97
+
98
+ parse_file (stream);
99
+ }
100
+
96
101
std::string DbcParser::get_extension (const std::string& file_name) {
97
102
std::size_t dot = file_name.find_last_of (" ." );
98
103
if (dot != std::string::npos) {
Original file line number Diff line number Diff line change @@ -54,3 +54,27 @@ TEST_CASE("Testing big endian, little endian") {
54
54
REQUIRE (signal.is_bigendian == false );
55
55
}
56
56
}
57
+
58
+ TEST_CASE (" Testing file stream mirrors the filename interface" ) {
59
+ std::string dbc_contents = PRIMITIVE_DBC + R"( BO_ 234 MSG1: 8 Vector__XXX
60
+ SG_ Sig1 : 55|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
61
+ SG_ Sig2 : 39|16@1- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX)" ;
62
+ const auto filename = create_temporary_dbc_with (dbc_contents.c_str ());
63
+ std::ifstream file (filename.c_str ());
64
+
65
+ auto parser = Libdbc::DbcParser ();
66
+ parser.parse_file (file);
67
+
68
+ REQUIRE (parser.get_messages ().size () == 1 );
69
+ REQUIRE (parser.get_messages ().at (0 ).name () == " MSG1" );
70
+ REQUIRE (parser.get_messages ().at (0 ).size () == 8 );
71
+ REQUIRE (parser.get_messages ().at (0 ).get_signals ().size () == 2 );
72
+ {
73
+ const auto signal = parser.get_messages ().at (0 ).get_signals ().at (0 );
74
+ REQUIRE (signal.is_bigendian == true );
75
+ }
76
+ {
77
+ const auto signal = parser.get_messages ().at (0 ).get_signals ().at (1 );
78
+ REQUIRE (signal.is_bigendian == false );
79
+ }
80
+ }
You can’t perform that action at this time.
0 commit comments