Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool CConfigor::LoadFromString(char* Input, unsigned long Length)
- {
- m_pCurrentParseChar = (unsigned char*)Input;
- m_CurrentParseLine = 1;
- IConfigorNode* pCurrentNode = GetRootNode();
- IConfigorNode* pNewNode = 0;
- string Name;
- char* pData = 0;
- unsigned long lLength = 0;
- int QuoteMode = 0;
- //for(unsigned long i = 0; i < Length; i++)
- do
- {
- char x = *m_pCurrentParseChar;
- m_pCurrentParseChar++;
- switch(x)
- {
- case '"': // Start of quote
- {
- char* Quote = 0;
- unsigned long len = 0;
- string pq = ParseQuotes(&Quote, &len, Length + Input);
- if(pq.length() > 1)
- {
- m_Error = pq;
- return false;
- }
- //i += len;
- QuoteMode++;
- if(QuoteMode == 1) // It's the name
- {
- Name = string(Quote, len);
- delete [] Quote;
- }
- else if(QuoteMode == 2)
- {
- // Data
- pData = Quote;
- lLength = len;
- QuoteMode = 0;
- IConfigorNode* node = new CConfigorNode(pCurrentNode, Name, (unsigned char*)pData, lLength);
- pNewNode = node;
- pData = 0;
- lLength = 0;
- }
- }
- break;
- case '{':
- {
- if(QuoteMode == 1)
- {
- IConfigorNode* node = new CConfigorNode(pCurrentNode, Name, 0, 0);
- pNewNode = node;
- QuoteMode = 0;
- }
- if(!pNewNode)
- {
- stringstream ss;
- ss << m_CurrentParseLine;
- m_Error = "Node expected to group near line " + ss.str();
- return false;
- }
- pCurrentNode = pNewNode;
- pNewNode = 0;
- pData = 0;
- lLength = 0;
- QuoteMode = 0;
- }
- break;
- case '}':
- // Pop up
- if(QuoteMode == 1)
- {
- IConfigorNode* node = new CConfigorNode(pCurrentNode, Name, 0, 0);
- pNewNode = 0; // Going out of that scope so pNewNode should be null
- QuoteMode = 0;
- }
- pCurrentNode = pCurrentNode->GetParent();
- if(!pCurrentNode) // One too many }'s
- {
- stringstream ss;
- ss << m_CurrentParseLine;
- m_Error = "EOF expected near line " + ss.str();
- return false;
- }
- break;
- case '\n':
- m_CurrentParseLine++;
- break;
- default:
- break;
- };
- }while(m_pCurrentParseChar != (unsigned char*)(Length + Input));
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement