Exemple #1
0
LuaTable LuaTable::SubTableExpr(const string& expr) const
{
	if (expr.empty()) {
		return LuaTable(*this);
	}
	if (!isValid) {
		return LuaTable();
	}

	string::size_type endPos;
	LuaTable nextTable;

	if (expr[0] == '[') { // numeric key
    endPos = expr.find(']');
    if (endPos == string::npos) {
      return LuaTable(); // missing brace
    }
    const char* startPtr = expr.c_str() + 1; // skip the '['
    char* endPtr;
    const int index = strtol(startPtr, &endPtr, 10);
    if (endPtr == startPtr) {
      return LuaTable(); // invalid index
    }
    endPos++; // eat the ']'
    nextTable = SubTable(index);
	}
	else { // string key
		endPos = expr.find_first_of(".[");
		if (endPos == string::npos) {
			return SubTable(expr);
		}
		nextTable = SubTable(expr.substr(0, endPos));
	}

	if (expr[endPos] == '.') {
		endPos++; // eat the dot
	}
	return nextTable.SubTableExpr(expr.substr(endPos));
}