本文整理汇总了C++中StringData::mutableData方法的典型用法代码示例。如果您正苦于以下问题:C++ StringData::mutableData方法的具体用法?C++ StringData::mutableData怎么用?C++ StringData::mutableData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringData
的用法示例。
在下文中一共展示了StringData::mutableData方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xdebug_get_php_symbol
Variant xdebug_get_php_symbol(ActRec* ar, StringData* name) {
int state;
auto slice = name->slice();
const char *p = slice.begin();
const char *end = slice.end();
const char *keyword = nullptr;
const char *keyword_end = nullptr;
Class* ctx = nullptr;
Variant sym;
String key(name->size(), ReserveStringMode());
char quotechar = 0;
SymbolType type = SymbolType::Root;
StringData* sd = key.get();
char* keyBuf = sd->mutableData();
for (; p != end; ++p) {
switch (state) {
case 0:
if (*p == '$') {
keyword = p + 1;
break;
}
// special tricks
if (*p == ':') {
keyword = p;
state = 7;
break;
}
keyword = p;
state = 1;
// fallthrough
case 1:
if (*p == '[') {
keyword_end = p;
if (keyword) {
memcpy(keyBuf, keyword, keyword_end - keyword);
sd->setSize(keyword_end - keyword);
sym = xdebug_lookup_symbol(type, key, ctx, sym, ar);
ctx = nullptr;
keyword = nullptr;
}
state = 3;
} else if (*p == '-') {
keyword_end = p;
if (keyword) {
memcpy(keyBuf, keyword, keyword_end - keyword);
sd->setSize(keyword_end - keyword);
sym = xdebug_lookup_symbol(type, key, ctx, sym, ar);
ctx = xdebug_get_sym_class(sym);
keyword = nullptr;
}
state = 2;
type = SymbolType::ObjProp;
} else if (*p == ':') {
keyword_end = p;
if (keyword) {
memcpy(keyBuf, keyword, keyword_end - keyword);
sd->setSize(keyword_end - keyword);
// XXX: this call is going to set ctx
sym = xdebug_lookup_symbol(type, key, ctx, sym, ar);
keyword = nullptr;
}
state = 8;
type = SymbolType::StaticProp;
}
break;
case 2:
if (*p != '>') {
keyword = p;
state = 1;
}
break;
case 8:
if (*p != ':') {
keyword = p;
state = 1;
}
break;
// Parsing in [...]
case 3:
// Associative arrays
if (*p == '\'' || *p == '"') {
state = 4;
keyword = p + 1;
quotechar = *p;
type = SymbolType::ArrayIndexAssoc;
}
// Numerical index
if (*p >= '0' && *p <= '9') {
state = 6;
keyword = p;
type = SymbolType::ArrayIndexNum;
}
// Numerical index starting with a -
if (*p == '-') {
state = 9;
keyword = p;
}
break;
//.........这里部分代码省略.........