本文整理汇总了C++中CFunctionsScopePtr::constScriptVar方法的典型用法代码示例。如果您正苦于以下问题:C++ CFunctionsScopePtr::constScriptVar方法的具体用法?C++ CFunctionsScopePtr::constScriptVar怎么用?C++ CFunctionsScopePtr::constScriptVar使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFunctionsScopePtr
的用法示例。
在下文中一共展示了CFunctionsScopePtr::constScriptVar方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: scArrayContains
static void scArrayContains(const CFunctionsScopePtr &c, void *data) {
CScriptVarPtr obj = c->getArgument("obj");
CScriptVarPtr arr = c->getArgument("this");
int l = arr->getArrayLength();
CScriptVarPtr equal = c->constScriptVar(Undefined);
for (int i=0;i<l;i++) {
equal = obj->mathsOp(arr->getArrayIndex(i), LEX_EQUAL);
if(equal->toBoolean()) {
c->setReturnVar(c->constScriptVar(true));
return;
}
}
c->setReturnVar(c->constScriptVar(false));
}
示例2: scArrayRemove
static void scArrayRemove(const CFunctionsScopePtr &c, void *data) {
CScriptVarPtr obj = c->getArgument("obj");
CScriptVarPtr arr = c->getArgument("this");
int i;
vector<int> removedIndices;
int l = arr->getArrayLength();
CScriptVarPtr equal = c->constScriptVar(Undefined);
for (i=0;i<l;i++) {
equal = obj->mathsOp(arr->getArrayIndex(i), LEX_EQUAL);
if(equal->toBoolean()) {
removedIndices.push_back(i);
}
}
if(removedIndices.size()) {
vector<int>::iterator remove_it = removedIndices.begin();
int next_remove = *remove_it;
int next_insert = *remove_it++;
for (i=next_remove;i<l;i++) {
CScriptVarLinkPtr link = arr->findChild(int2string(i));
if(i == next_remove) {
if(link) arr->removeLink(link);
if(remove_it != removedIndices.end())
next_remove = *remove_it++;
} else {
if(link) {
arr->setArrayIndex(next_insert++, link);
arr->removeLink(link);
}
}
}
}
}
示例3: scStringCharCodeAt
static void scStringCharCodeAt(const CFunctionsScopePtr &c, void *) {
string str = this2string(c);
int p = c->getArgument("pos")->toNumber().toInt32();
if (p>=0 && p<(int)str.length())
c->setReturnVar(c->newScriptVar((unsigned char)str.at(p)));
else
c->setReturnVar(c->constScriptVar(NaN));
}
示例4: scArrayPop
static void scArrayPop(const CFunctionsScopePtr &c, void *data) {
CScriptVarPtr arr = c->getArgument("this");
uint32_t len = c->getLength(arr);
if(len) {
c->setReturnVar(c->getPropertyValue(arr, len-1));
arr->removeChild(int2string(len-1));
} else
c->setReturnVar(c->constScriptVar(Undefined));
}
示例5: scStringMatch
static void scStringMatch(const CFunctionsScopePtr &c, void *) {
string str = this2string(c);
string flags="flags", substr, newsubstr, match;
bool global, ignoreCase, sticky;
CScriptVarRegExpPtr RegExp = getRegExpData(c, "regexp", true, "flags", substr, global, ignoreCase, sticky);
if(!global) {
if(!RegExp)
RegExp = ::newScriptVar(c->getContext(), substr, flags);
if(RegExp) {
try {
c->setReturnVar(RegExp->exec(str));
} catch(regex_error e) {
c->throwError(SyntaxError, string(e.what())+" - "+CScriptVarRegExp::ErrorStr(e.code()));
}
}
} else {
try {
CScriptVarArrayPtr retVar = c->newScriptVar(Array);
int idx=0;
string::size_type offset=0;
global = global && substr.length();
string::const_iterator search_begin=str.begin(), match_begin, match_end;
if(regex_search(str, search_begin, substr, ignoreCase, sticky, match_begin, match_end)) {
do {
offset = match_begin-str.begin();
retVar->addChild(int2string(idx++), c->newScriptVar(string(match_begin, match_end)));
#if 1 /* Fix from "vcmpeq" (see Issue 14) currently untested */
if (match_begin == match_end) {
if (search_begin != str.end())
++search_begin;
else
break;
} else {
search_begin = match_end;
}
#else
search_begin = match_end;
#endif
} while(global && regex_search(str, search_begin, substr, ignoreCase, sticky, match_begin, match_end));
}
if(idx) {
retVar->addChild("input", c->newScriptVar(str));
retVar->addChild("index", c->newScriptVar((int)offset));
c->setReturnVar(retVar);
} else
c->setReturnVar(c->constScriptVar(Null));
} catch(regex_error e) {
c->throwError(SyntaxError, string(e.what())+" - "+CScriptVarRegExp::ErrorStr(e.code()));
}
}
}
示例6: scStringSplit
static void scStringSplit(const CFunctionsScopePtr &c, void *) {
const string str = this2string(c);
string seperator;
bool global, ignoreCase, sticky;
#ifndef NO_REGEXP
CScriptVarRegExpPtr RegExp = getRegExpData(c, "separator", true, 0, seperator, global, ignoreCase, sticky);
#else
getRegExpData(c, "separator", true, 0, seperator, global, ignoreCase, sticky);
#endif
CScriptVarPtr sep_var = c->getArgument("separator");
CScriptVarPtr limit_var = c->getArgument("limit");
int limit = limit_var->isUndefined() ? 0x7fffffff : limit_var->toNumber().toInt32();
CScriptVarPtr result(c->newScriptVar(Array));
c->setReturnVar(result);
if(limit == 0)
return;
else if(!str.size() || sep_var->isUndefined()) {
result->addChild("0", c->newScriptVar(str));
return;
}
if(seperator.size() == 0) {
for(int i=0; i<min((int)str.size(), limit); ++i)
result->addChild(i, c->newScriptVar(str.substr(i,1)));
return;
}
int length = 0;
string::const_iterator search_begin=str.begin(), match_begin, match_end;
#ifndef NO_REGEXP
smatch match;
#endif
bool found=true;
while(found) {
#ifndef NO_REGEXP
if(RegExp) {
try {
found = regex_search(str, search_begin, seperator, ignoreCase, sticky, match_begin, match_end, match);
} catch(regex_error e) {
c->throwError(SyntaxError, string(e.what())+" - "+CScriptVarRegExp::ErrorStr(e.code()));
}
} else /* NO_REGEXP */
#endif
found = string_search(str, search_begin, seperator, ignoreCase, sticky, match_begin, match_end);
string f;
if(found) {
result->addChild(length++, c->newScriptVar(string(search_begin, match_begin)));
if(length>=limit) break;
#ifndef NO_REGEXP
for(uint32_t i=1; i<match.size(); i++) {
if(match[i].matched)
result->addChild(length++, c->newScriptVar(string(match[i].first, match[i].second)));
else
result->addChild(length++, c->constScriptVar(Undefined));
if(length>=limit) break;
}
if(length>=limit) break;
#endif
search_begin = match_end;
} else {
result->addChild(length++, c->newScriptVar(string(search_begin,str.end())));
if(length>=limit) break;
}
}
}