MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / skip

Method skip

src/ifcparse/IfcCharacterDecoder.cpp:225–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

223}
224
225void IfcCharacterDecoder::skip() {
226 unsigned int parse_state = 0;
227 char current_char;
228 unsigned int hex_count = 0;
229 while ((current_char = stream_->peek()) != 0) {
230 if (EXPECTS_CHARACTER(parse_state)) {
231 parse_state = 0;
232 } else if (current_char == '\'' && (parse_state == 0U)) {
233 parse_state = APOSTROPHE;
234 } else if (current_char == '\\' && (parse_state == 0U)) {
235 parse_state = FIRST_SOLIDUS;
236 } else if (current_char == '\\' && EXPECTS_SOLIDUS(parse_state)) {
237 if (((parse_state & ALPHABET_DEFINITION) != 0U) ||
238 ((parse_state & IGNORED_DIRECTIVE) != 0U) ||
239 ((parse_state & ENDEXTENDED_0) != 0U)) {
240 parse_state = hex_count = 0;
241 } else if ((parse_state & ENCOUNTERED_HEX) != 0U) {
242 parse_state += THIRD_SOLIDUS;
243 parse_state -= ENCOUNTERED_HEX;
244 } else {
245 parse_state += SECOND_SOLIDUS;
246 }
247 } else if (current_char == 'X' && EXPECTS_ENDEXTENDED_X(parse_state)) {
248 parse_state += ENDEXTENDED_X;
249 } else if (current_char == '0' && EXPECTS_ENDEXTENDED_0(parse_state)) {
250 parse_state += ENDEXTENDED_0;
251 } else if (current_char == 'X' && EXPECTS_ARBITRARY(parse_state)) {
252 parse_state += ARBITRARY;
253 } else if (current_char == '2' && EXPECTS_ARBITRARY2(parse_state)) {
254 parse_state += EXTENDED2;
255 } else if (current_char == '4' && EXPECTS_ARBITRARY2(parse_state)) {
256 parse_state += EXTENDED2 + EXTENDED4;
257 } else if (current_char == 'P' && EXPECTS_ALPHABET(parse_state)) {
258 parse_state += ALPHABET;
259 } else if ((current_char == 'N' || current_char == 'F') && EXPECTS_N_OR_F(parse_state)) {
260 parse_state += IGNORED_DIRECTIVE;
261 } else if (IS_VALID_ALPHABET_DEFINITION(current_char) && EXPECTS_ALPHABET_DEFINITION(parse_state)) {
262 parse_state += ALPHABET_DEFINITION;
263 } else if (current_char == 'S' && EXPECTS_PAGE(parse_state)) {
264 parse_state += PAGE;
265 } else if (IS_HEXADECIMAL(current_char) && EXPECTS_HEX(parse_state)) {
266 parse_state += HEX((++hex_count));
267 if ((hex_count == 2 && ((parse_state & EXTENDED2) == 0U)) ||
268 (hex_count == 4 && ((parse_state & EXTENDED4) == 0U)) ||
269 (hex_count == 8)) {
270 if (hex_count == 2) {
271 parse_state = 0;
272 } else {
273 CLEAR_HEX(parse_state);
274 parse_state |= ENCOUNTERED_HEX;
275 }
276 hex_count = 0;
277 }
278 } else if ((parse_state != 0U) && !(
279 (current_char == '\\' && parse_state == FIRST_SOLIDUS) ||
280 (current_char == '\'' && parse_state == APOSTROPHE))) {
281 if (parse_state == APOSTROPHE && current_char != '\'') {
282 break;

Calls 4

IfcInvalidTokenExceptionFunction · 0.85
peekMethod · 0.80
tellMethod · 0.80
incrementMethod · 0.80

Tested by 7

test_fileFunction · 0.64
test_fileFunction · 0.64
test_png_custom_sizeMethod · 0.64