mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2024-12-27 07:15:31 +03:00
Added legacy response context operators
This commit is contained in:
parent
8966462fee
commit
24ac080608
@ -165,8 +165,20 @@ CConceptHistoriesDataOps g_ConceptHistoriesSaveDataOps;
|
||||
RR::CApplyContextOperator RR::sm_OpCopy(0); // "
|
||||
RR::CIncrementOperator RR::sm_OpIncrement(2); // "++"
|
||||
RR::CDecrementOperator RR::sm_OpDecrement(2); // "--"
|
||||
#ifdef MAPBASE
|
||||
RR::CMultiplyOperator RR::sm_OpMultiply(2); // "**"
|
||||
RR::CDivideOperator RR::sm_OpDivide(2); // "/="
|
||||
#endif
|
||||
RR::CToggleOperator RR::sm_OpToggle(1); // "!"
|
||||
|
||||
#ifdef MAPBASE
|
||||
// LEGACY - See below
|
||||
RR::CIncrementOperator RR::sm_OpLegacyIncrement(1); // "+"
|
||||
RR::CDecrementOperator RR::sm_OpLegacyDecrement(1); // "-"
|
||||
RR::CMultiplyOperator RR::sm_OpLegacyMultiply(1); // "*"
|
||||
RR::CDivideOperator RR::sm_OpLegacyDivide(1); // "/"
|
||||
#endif
|
||||
|
||||
RR::CApplyContextOperator *RR::CApplyContextOperator::FindOperator( const char *pContextString )
|
||||
{
|
||||
if ( !pContextString || pContextString[0] == 0 )
|
||||
@ -174,6 +186,65 @@ RR::CApplyContextOperator *RR::CApplyContextOperator::FindOperator( const char *
|
||||
return &sm_OpCopy;
|
||||
}
|
||||
|
||||
#ifdef MAPBASE
|
||||
// This is one of those freak coincidences where Mapbase implemented its own context operators with no knowledge of context operators from later versions of the engine.
|
||||
// Mapbase's context operators only required *one* operator character (e.g. '+' as opposed to '++') and supported multiplication and division.
|
||||
// Although Valve's system now replaces Mapbase's system, multiplication and division have been added and maintaining the old syntax is needed for legacy support.
|
||||
// That being said, it's believed that almost nobody knew that Mapbase supported context operators in the first place, so there might not be much legacy to support anyway.
|
||||
switch (pContextString[0])
|
||||
{
|
||||
case '+':
|
||||
{
|
||||
if (pContextString[1] != '+')
|
||||
{
|
||||
Warning( "\"%s\" needs another '+' to qualify as a proper operator. This code is regarding it as an operator anyway for legacy support, which might be going away soon!!!\n", pContextString );
|
||||
return &sm_OpLegacyIncrement;
|
||||
}
|
||||
else if (pContextString[2] == '\0')
|
||||
break;
|
||||
return &sm_OpIncrement;
|
||||
}
|
||||
case '-':
|
||||
{
|
||||
if (pContextString[1] != '-')
|
||||
{
|
||||
Warning( "\"%s\" needs another '-' to qualify as a proper operator. This code is regarding it as an operator anyway for legacy support, which might be going away soon!!!\n", pContextString );
|
||||
return &sm_OpLegacyDecrement;
|
||||
}
|
||||
else if (pContextString[2] == '\0')
|
||||
break;
|
||||
return &sm_OpIncrement;
|
||||
}
|
||||
case '*':
|
||||
{
|
||||
if (pContextString[1] != '*')
|
||||
{
|
||||
Warning( "\"%s\" needs another '*' to qualify as a proper operator. This code is regarding it as an operator anyway for legacy support, which might be going away soon!!!\n", pContextString );
|
||||
return &sm_OpLegacyMultiply;
|
||||
}
|
||||
else if (pContextString[2] == '\0')
|
||||
break;
|
||||
return &sm_OpMultiply;
|
||||
}
|
||||
case '/':
|
||||
{
|
||||
if (pContextString[1] != '=')
|
||||
{
|
||||
Warning( "\"%s\" needs a '=' after the '/' to qualify as a proper operator. This code is regarding it as an operator anyway for legacy support, which might be going away soon!!!\n", pContextString );
|
||||
return &sm_OpLegacyDivide;
|
||||
}
|
||||
else if (pContextString[2] == '\0')
|
||||
break;
|
||||
return &sm_OpDivide;
|
||||
} break;
|
||||
case '!':
|
||||
{
|
||||
return &sm_OpToggle;
|
||||
}
|
||||
}
|
||||
|
||||
return &sm_OpCopy;
|
||||
#else
|
||||
if ( pContextString[0] == '+' && pContextString [1] == '+' && pContextString[2] != '\0' )
|
||||
{
|
||||
return &sm_OpIncrement;
|
||||
@ -182,6 +253,16 @@ RR::CApplyContextOperator *RR::CApplyContextOperator::FindOperator( const char *
|
||||
{
|
||||
return &sm_OpDecrement;
|
||||
}
|
||||
#ifdef MAPBASE
|
||||
else if ( pContextString[0] == '*' && pContextString [1] == '*' && pContextString[2] != '\0' )
|
||||
{
|
||||
return &sm_OpMultiply;
|
||||
}
|
||||
else if ( pContextString[0] == '/' && pContextString [1] == '=' && pContextString[2] != '\0' )
|
||||
{
|
||||
return &sm_OpDivide;
|
||||
}
|
||||
#endif
|
||||
else if ( pContextString[0] == '!' )
|
||||
{
|
||||
return &sm_OpToggle;
|
||||
@ -190,6 +271,7 @@ RR::CApplyContextOperator *RR::CApplyContextOperator::FindOperator( const char *
|
||||
{
|
||||
return &sm_OpCopy;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// default is just copy
|
||||
@ -228,6 +310,31 @@ bool RR::CDecrementOperator::Apply( const char *pOldValue, const char *pOperator
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef MAPBASE
|
||||
bool RR::CMultiplyOperator::Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize )
|
||||
{
|
||||
Assert( pOperator[0] == '*' && pOperator[1] == '*' );
|
||||
// parse out the old value as a numeric
|
||||
int nOld = pOldValue ? V_atoi(pOldValue) : 0;
|
||||
int nInc = V_atoi( pOperator+m_nSkipChars );
|
||||
V_snprintf( pNewValue, pNewValBufSize, "%d", nOld*nInc );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RR::CDivideOperator::Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize )
|
||||
{
|
||||
Assert( pOperator[0] == '/' && pOperator[1] == '=' );
|
||||
// parse out the old value as a numeric
|
||||
int nOld = pOldValue ? V_atoi(pOldValue) : 0;
|
||||
int nInc = V_atoi( pOperator+m_nSkipChars );
|
||||
if (nInc == 0)
|
||||
V_strncpy( pNewValue, "0", pNewValBufSize );
|
||||
else
|
||||
V_snprintf( pNewValue, pNewValBufSize, "%d", nOld/nInc );
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool RR::CToggleOperator::Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize )
|
||||
{
|
||||
Assert( pOperator[0] == '!' );
|
||||
|
@ -611,6 +611,22 @@ namespace RR
|
||||
virtual bool Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize );
|
||||
};
|
||||
|
||||
#ifdef MAPBASE
|
||||
class CMultiplyOperator : public CApplyContextOperator
|
||||
{
|
||||
public:
|
||||
inline CMultiplyOperator( int nSkipChars ) : CApplyContextOperator(nSkipChars) {};
|
||||
virtual bool Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize );
|
||||
};
|
||||
|
||||
class CDivideOperator : public CApplyContextOperator
|
||||
{
|
||||
public:
|
||||
inline CDivideOperator( int nSkipChars ) : CApplyContextOperator(nSkipChars) {};
|
||||
virtual bool Apply( const char *pOldValue, const char *pOperator, char *pNewValue, int pNewValBufSize );
|
||||
};
|
||||
#endif
|
||||
|
||||
class CToggleOperator : public CApplyContextOperator
|
||||
{
|
||||
public:
|
||||
@ -622,7 +638,19 @@ namespace RR
|
||||
extern CApplyContextOperator sm_OpCopy;
|
||||
extern CIncrementOperator sm_OpIncrement;
|
||||
extern CDecrementOperator sm_OpDecrement;
|
||||
#ifdef MAPBASE
|
||||
extern CMultiplyOperator sm_OpMultiply;
|
||||
extern CDivideOperator sm_OpDivide;
|
||||
#endif
|
||||
extern CToggleOperator sm_OpToggle;
|
||||
|
||||
#ifdef MAPBASE
|
||||
// LEGACY - See CApplyContextOperator::FindOperator()
|
||||
extern CIncrementOperator sm_OpLegacyIncrement;
|
||||
extern CDecrementOperator sm_OpLegacyDecrement;
|
||||
extern CMultiplyOperator sm_OpLegacyMultiply;
|
||||
extern CDivideOperator sm_OpLegacyDivide;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user