MCPcopy Create free account
hub / github.com/PABannier/sam3.cpp / parse_phase6_case

Function parse_phase6_case

tests/test_metal_python_ref_compare.cpp:126–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124}
125
126static bool parse_phase6_case(const std::string & path,
127 sam3_pvs_params & params,
128 std::string & case_id) {
129 FILE * f = fopen(path.c_str(), "r");
130 if (!f) {
131 return false;
132 }
133
134 char line[1024];
135 if (!fgets(line, sizeof(line), f)) {
136 fclose(f);
137 return false;
138 }
139 fclose(f);
140
141 std::string row(line);
142 while (!row.empty() && (row.back() == '\n' || row.back() == '\r')) {
143 row.pop_back();
144 }
145
146 std::vector<std::string> fields;
147 size_t start = 0;
148 while (start <= row.size()) {
149 size_t end = row.find('\t', start);
150 if (end == std::string::npos) {
151 end = row.size();
152 }
153 fields.emplace_back(row.substr(start, end - start));
154 start = end + 1;
155 if (end == row.size()) {
156 break;
157 }
158 }
159 while (fields.size() < 5) {
160 fields.emplace_back();
161 }
162
163 case_id = fields[0];
164 params.multimask = fields[1] == "1";
165 params.use_box = false;
166
167 if (!fields[4].empty()) {
168 float vals[4] = {0, 0, 0, 0};
169 size_t start = 0;
170 for (int i = 0; i < 4; ++i) {
171 size_t end = fields[4].find(':', start);
172 if (end == std::string::npos) end = fields[4].size();
173 vals[i] = std::stof(fields[4].substr(start, end - start));
174 start = end + 1;
175 }
176 params.box = {vals[0], vals[1], vals[2], vals[3]};
177 params.use_box = true;
178 }
179
180 auto parse_points = [](const std::string & field, std::vector<sam3_point> & dst) {
181 size_t start = 0;
182 while (start < field.size()) {
183 size_t end = field.find('|', start);

Callers 1

mainFunction · 0.85

Calls 1

parse_pointsFunction · 0.70

Tested by

no test coverage detected