Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
/*
** The copyright to the contents herein is the property of Valve, L.L.C. ** The contents may be used and/or copied only with the written permission of ** Valve, L.L.C., or in accordance with the terms and conditions stipulated in ** the agreement/contract under which the contents have been supplied. ** ******************************************************************************* ** ** Contents: ** ** TokenLine.cpp: implementation of the TokenLine class. ** ******************************************************************************/
#include "TokenLine.h"
#include <string.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TokenLine::~TokenLine() {
}
bool TokenLine::SetLine(const char * newLine) { m_tokenNumber = 0;
if (!newLine || ( strlen(newLine) >= (MAX_LINE_CHARS-1) ) ) { memset( m_fullLine, 0, MAX_LINE_CHARS ); memset( m_tokenBuffer, 0, MAX_LINE_CHARS ); return false; }
strncpy( m_fullLine, newLine, MAX_LINE_CHARS-1 ); m_fullLine[ MAX_LINE_CHARS-1 ] = '\0';
strncpy( m_tokenBuffer, newLine, MAX_LINE_CHARS-1 ); m_tokenBuffer[ MAX_LINE_CHARS-1 ] = '\0';
// parse tokens
char * charPointer = m_tokenBuffer; while (*charPointer && (m_tokenNumber < MAX_LINE_TOKENS)) { while (*charPointer && ((*charPointer <= 32) || (*charPointer > 126))) charPointer++;
if (*charPointer) { m_token[m_tokenNumber] = charPointer;
// special treatment for quotes
if (*charPointer == '\"') { charPointer++; m_token[m_tokenNumber] = charPointer; while (*charPointer && (*charPointer != '\"') ) charPointer++;
} else { m_token[m_tokenNumber] = charPointer; while (*charPointer && ((*charPointer > 32) && (*charPointer <= 126))) charPointer++; }
m_tokenNumber++;
if (*charPointer) { *charPointer=0; charPointer++; } } }
return (m_tokenNumber != MAX_LINE_TOKENS); }
char * TokenLine::GetLine() { return m_fullLine; }
char * TokenLine::GetToken(int i) { if (i >= m_tokenNumber) return NULL; return m_token[i];
}
// if the given parm is not present return NULL
// otherwise return the address of the following token, or an empty string
char* TokenLine::CheckToken(char * parm) { for (int i = 0 ; i < m_tokenNumber; i ++) { if (!m_token[i]) continue; if ( !strcmp (parm,m_token[i]) ) { char * ret = m_token[i+1]; // if this token doesn't exist, since index i was the last
// return an empty string
if ( (i+1) == m_tokenNumber ) ret = ""; return ret; } } return NULL; }
int TokenLine::CountToken() { int c = 0; for (int i = 0 ; i < m_tokenNumber; i ++) { if (m_token[i]) c++; } return c; }
char* TokenLine::GetRestOfLine(int i) { if (i >= m_tokenNumber) return NULL; return m_fullLine + (m_token[i] - m_tokenBuffer); }
TokenLine::TokenLine(char * string) { SetLine(string); }
TokenLine::TokenLine() {
}
|