MCPcopy Create free account
hub / github.com/bytedance/Fastbot_Android / Identify

Method Identify

native/thirdpart/tinyxml2/tinyxml2.cpp:710–777  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

708
709
710char* XMLDocument::Identify( char* p, XMLNode** node )
711{
712 TIXMLASSERT( node );
713 TIXMLASSERT( p );
714 char* const start = p;
715 int const startLine = _parseCurLineNum;
716 p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
717 if( !*p ) {
718 *node = 0;
719 TIXMLASSERT( p );
720 return p;
721 }
722
723 // These strings define the matching patterns:
724 static const char* xmlHeader = { "<?" };
725 static const char* commentHeader = { "<!--" };
726 static const char* cdataHeader = { "<![CDATA[" };
727 static const char* dtdHeader = { "<!" };
728 static const char* elementHeader = { "<" }; // and a header for everything else; check last.
729
730 static const int xmlHeaderLen = 2;
731 static const int commentHeaderLen = 4;
732 static const int cdataHeaderLen = 9;
733 static const int dtdHeaderLen = 2;
734 static const int elementHeaderLen = 1;
735
736 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) ); // use same memory pool
737 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
738 XMLNode* returnNode = 0;
739 if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
740 returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
741 returnNode->_parseLineNum = _parseCurLineNum;
742 p += xmlHeaderLen;
743 }
744 else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
745 returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
746 returnNode->_parseLineNum = _parseCurLineNum;
747 p += commentHeaderLen;
748 }
749 else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
750 XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
751 returnNode = text;
752 returnNode->_parseLineNum = _parseCurLineNum;
753 p += cdataHeaderLen;
754 text->SetCData( true );
755 }
756 else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
757 returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
758 returnNode->_parseLineNum = _parseCurLineNum;
759 p += dtdHeaderLen;
760 }
761 else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
762 returnNode = CreateUnlinkedNode<XMLElement>( _elementPool );
763 returnNode->_parseLineNum = _parseCurLineNum;
764 p += elementHeaderLen;
765 }
766 else {
767 returnNode = CreateUnlinkedNode<XMLText>( _textPool );

Callers 1

ParseDeepMethod · 0.80

Calls 2

SkipWhiteSpaceFunction · 0.85
StringEqualFunction · 0.85

Tested by

no test coverage detected