MCPcopy Create free account
hub / github.com/avast/retdec / Identify

Method Identify

deps/tinyxml2/tinyxml2.cpp:678–745  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

676
677
678char* XMLDocument::Identify( char* p, XMLNode** node )
679{
680 TIXMLASSERT( node );
681 TIXMLASSERT( p );
682 char* const start = p;
683 int const startLine = _parseCurLineNum;
684 p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
685 if( !*p ) {
686 *node = 0;
687 TIXMLASSERT( p );
688 return p;
689 }
690
691 // These strings define the matching patterns:
692 static const char* xmlHeader = { "<?" };
693 static const char* commentHeader = { "<!--" };
694 static const char* cdataHeader = { "<![CDATA[" };
695 static const char* dtdHeader = { "<!" };
696 static const char* elementHeader = { "<" }; // and a header for everything else; check last.
697
698 static const int xmlHeaderLen = 2;
699 static const int commentHeaderLen = 4;
700 static const int cdataHeaderLen = 9;
701 static const int dtdHeaderLen = 2;
702 static const int elementHeaderLen = 1;
703
704 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) ); // use same memory pool
705 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
706 XMLNode* returnNode = 0;
707 if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
708 returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
709 returnNode->_parseLineNum = _parseCurLineNum;
710 p += xmlHeaderLen;
711 }
712 else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
713 returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
714 returnNode->_parseLineNum = _parseCurLineNum;
715 p += commentHeaderLen;
716 }
717 else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
718 XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
719 returnNode = text;
720 returnNode->_parseLineNum = _parseCurLineNum;
721 p += cdataHeaderLen;
722 text->SetCData( true );
723 }
724 else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
725 returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
726 returnNode->_parseLineNum = _parseCurLineNum;
727 p += dtdHeaderLen;
728 }
729 else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
730 returnNode = CreateUnlinkedNode<XMLElement>( _elementPool );
731 returnNode->_parseLineNum = _parseCurLineNum;
732 p += elementHeaderLen;
733 }
734 else {
735 returnNode = CreateUnlinkedNode<XMLText>( _textPool );

Callers 1

ParseDeepMethod · 0.80

Calls 2

SkipWhiteSpaceFunction · 0.85
StringEqualFunction · 0.50

Tested by

no test coverage detected