本文整理汇总了C++中StringVar类的典型用法代码示例。如果您正苦于以下问题:C++ StringVar类的具体用法?C++ StringVar怎么用?C++ StringVar使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了StringVar类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoExtractString
static void __stdcall DoExtractString(char* scriptData, UInt32 dataLen, char* dest, ScriptEventList* eventList)
{
// copy the string
memcpy(dest, scriptData, dataLen);
dest[dataLen] = 0;
if (dataLen && dest[0] == '$' && eventList && eventList->m_script) // variable name
{
Script::VariableInfo* varInfo = NULL;
varInfo = eventList->m_script->GetVariableByName(dest + 1);
if (varInfo)
{
ScriptEventList::Var* var;
var = eventList->GetVariable(varInfo->idx);
if (var)
{
StringVar* strVar;
strVar = g_StringMap.Get(var->data);
if (strVar)
if (strVar->GetLength() < 0x100) // replace string with contents of string var
strcpy_s(dest, strVar->GetLength() + 1, strVar->GetCString());
}
}
} // "%e" becomes an empty string
else if (dataLen == 2 && dest[0] == '%' && toupper(dest[1]) == 'E')
dest[0] = 0;
}
示例2: GetString
const char* GetString(UInt32 stringID)
{
StringVar* var = g_StringMap.Get(stringID);
if (var)
return var->GetCString();
else
return NULL;
}
示例3: AssignableStringToken
AssignableStringVarToken::AssignableStringVarToken(UInt32 _id, UInt32 lbound, UInt32 ubound) : AssignableStringToken(_id, lbound, ubound)
{
StringVar* strVar = g_StringMap.Get(value.arrID);
if (strVar) {
upper = (upper > strVar->GetLength()) ? strVar->GetLength() - 1 : upper;
substring = strVar->SubString(lower, upper - lower + 1);
}
}
示例4: Cmd_sv_Length_Execute
bool Cmd_sv_Length_Execute(COMMAND_ARGS)
{
*result = -1; // sentinel value if extraction fails
UInt32 strID = 0;
if (ExtractArgs(EXTRACT_ARGS, &strID))
{
StringVar* str = g_StringMap.Get(strID);
if (str)
*result = str->GetLength();
}
return true;
}
示例5:
StringIterLoop::StringIterLoop(const ForEachContext* context)
{
StringVar* srcVar = g_StringMap.Get(context->sourceID);
StringVar* iterVar = g_StringMap.Get(context->iteratorID);
if (srcVar && iterVar)
{
m_src = srcVar->String();
m_curIndex = 0;
m_iterID = context->iteratorID;
if (m_src.length())
iterVar->Set(m_src.substr(0, 1).c_str());
}
}
示例6: StringVar_Find_Execute
bool StringVar_Find_Execute(COMMAND_ARGS, UInt32 mode, CommandInfo* commandInfo)
{
*result = -1;
UInt32 strID = 0;
UInt32 startPos = 0;
UInt32 numChars = -1;
UInt32 bCaseSensitive = 0;
UInt32 numToReplace = -1; //replace all by default
char toFind[kMaxMessageLength] = { 0 };
UInt32 intResult = -1;
if (!ExtractFormatStringArgs(0, toFind, PASS_FMTSTR_ARGS, commandInfo->numParams, &strID, &startPos, &numChars, &bCaseSensitive, &numToReplace))
return true;
StringVar* strVar = g_StringMap.Get(strID);
if (strVar)
{
if (numChars == -1)
numChars = strVar->GetLength() - startPos;
switch (mode)
{
case eMode_svFind:
intResult = strVar->Find(toFind, startPos, numChars, bCaseSensitive ? true : false);
break;
case eMode_svCount:
intResult = strVar->Count(toFind, startPos, numChars, bCaseSensitive ? true : false);
break;
case eMode_svReplace:
{
std::string str(toFind);
UInt32 splitPoint = str.find(GetSeparatorChar(scriptObj));
if (splitPoint != -1 && splitPoint < str.length())
{
toFind[splitPoint] = '\0';
char* replaceWith = (splitPoint == str.length() - 1) ? "" : toFind + splitPoint + 1;
intResult = strVar->Replace(toFind, replaceWith, startPos, numChars, bCaseSensitive ? true : false, numToReplace);
}
break;
}
}
}
if (intResult != -1)
*result = intResult;
return true;
}
示例7: Cmd_sv_Set_Execute
bool Cmd_sv_Set_Execute(COMMAND_ARGS)
{
char buffer[kMaxMessageLength] = { 0 };
UInt32 stringID = 0;
if (ExtractFormatStringArgs(0, buffer, PASS_FMTSTR_ARGS, kCommandInfo_sv_Set.numParams, &stringID))
{
StringVar* var = g_StringMap.Get(stringID);
if (var)
{
var->Set(buffer);
}
}
return true;
}
示例8: Update
bool StringIterLoop::Update(COMMAND_ARGS)
{
StringVar* iterVar = g_StringMap.Get(m_iterID);
if (iterVar)
{
m_curIndex++;
if (m_curIndex < m_src.length())
{
iterVar->Set(m_src.substr(m_curIndex, 1).c_str());
return true;
}
}
return false;
}
示例9: Cmd_sv_GetChar_Execute
bool Cmd_sv_GetChar_Execute(COMMAND_ARGS)
{
UInt32 strID = 0;
UInt32 charPos = 0;
*result = -1; // error return value
if (!ExtractArgs(EXTRACT_ARGS, &strID, &charPos))
return true;
StringVar* strVar = g_StringMap.Get(strID);
if (strVar)
*result = strVar->At(charPos);
return true;
}
示例10: Cmd_sv_Insert_Execute
bool Cmd_sv_Insert_Execute(COMMAND_ARGS)
{
UInt32 strID = 0;
UInt32 insertionPos = 0;
char subString[kMaxMessageLength] = { 0 };
*result = 0;
if (!ExtractFormatStringArgs(0, subString, PASS_FMTSTR_ARGS, kCommandInfo_sv_Insert.numParams, &strID, &insertionPos))
return true;
StringVar* lhs = g_StringMap.Get(strID);
if (lhs)
lhs->Insert(subString, insertionPos);
return true;
}
示例11: if
const char* ScriptToken::GetString() const
{
static const char* empty = "";
const char* result = NULL;
if (type == kTokenType_String)
result = value.str.c_str();
#if OBLIVION
else if (type == kTokenType_StringVar && value.var)
{
StringVar* strVar = g_StringMap.Get(value.var->data);
result = strVar ? strVar->GetCString() : NULL;
}
#endif
return result ? result : empty;
}
示例12: Assign
bool AssignableStringVarToken::Assign(const char* str)
{
StringVar* strVar = g_StringMap.Get(value.arrID);
if (strVar) {
UInt32 len = strVar->GetLength();
if (lower <= upper && upper < len) {
strVar->Erase(lower, upper-lower + 1);
if (str) {
strVar->Insert(str, lower);
substring = strVar->String();
}
return true;
}
}
return false;
}
示例13: AssignToStringVarLong
bool AssignToStringVarLong(COMMAND_ARGS, const char* newValue)
{
double strID = 0;
UInt8 modIndex = 0;
bool bTemp = ExpressionEvaluator::Active();
StringVar* strVar = NULL;
UInt32 len = (newValue) ? strlen(newValue) : 0;
if (!newValue || len >= kMaxMessageLength) //if null pointer or too long, assign an empty string
newValue = "";
if (ExtractSetStatementVar(scriptObj, eventList, scriptData, &strID, &modIndex)) {
strVar = g_StringMap.Get(strID);
bTemp = false;
}
else if (!bTemp) {
_WARNING("Function must be used within a Set statement or NVSE expression");
return false;
}
if (!modIndex)
modIndex = scriptObj->GetModIndex();
if (strVar)
{
strVar->Set(newValue);
g_StringMap.MarkTemporary(strID, false);
}
else
strID = g_StringMap.Add(modIndex, newValue, bTemp);
*result = strID;
#if _DEBUG // console feedback disabled in release by request (annoying when called from batch scripts)
if (IsConsoleMode() && !bTemp)
{
if (len < 480)
Console_Print("Assigned string >> \"%s\"", newValue);
else
Console_Print("Assigned string (too long to print)");
}
#endif
return true;
}
示例14: Cmd_sv_Compare_Execute
bool Cmd_sv_Compare_Execute(COMMAND_ARGS)
{
*result = -2; //sentinel value if comparison fails
UInt32 stringID = 0;
char buffer[kMaxMessageLength] = { 0 };
UInt32 bCaseSensitive = 0;
if (!ExtractFormatStringArgs(0, buffer, PASS_FMTSTR_ARGS, kCommandInfo_sv_Compare.numParams, &stringID, &bCaseSensitive))
return true;
StringVar* lhs = g_StringMap.Get(stringID);
if (!lhs)
return true;
*result = lhs->Compare(buffer, bCaseSensitive ? true : false);
return true;
}
示例15: Cmd_sv_ToNumeric_Execute
bool Cmd_sv_ToNumeric_Execute(COMMAND_ARGS)
{
UInt32 strID = 0;
UInt32 startPos = 0;
*result = 0;
if (!ExtractArgs(EXTRACT_ARGS, &strID, &startPos))
return true;
StringVar* strVar = g_StringMap.Get(strID);
if (strVar)
{
const char* cStr = strVar->GetCString();
*result = strtod(cStr + startPos, NULL);
}
return true;
}