本文整理汇总了C++中Row::addEntry方法的典型用法代码示例。如果您正苦于以下问题:C++ Row::addEntry方法的具体用法?C++ Row::addEntry怎么用?C++ Row::addEntry使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Row
的用法示例。
在下文中一共展示了Row::addEntry方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: unserialize
void unserialize(Mapping& map, const string& data)
{
string::const_iterator it = data.begin();
string::const_iterator end = data.end();
Row* row = &map.rows.back();
size_t column = 0;
size_t source = 0;
size_t in_line = 0;
size_t in_col = 0;
size_t token = 0;
vector<int> offset;
while(true) {
// check if we reached a delimiter for entries
if (it == end || *it == ',' || *it == ';') {
// only create valid entries
// checks out of bound access
if (
offset.size() == 1 &&
int(offset[0] + column) >= 0
) {
row->addEntry(Entry(
column += offset[0]
));
}
else if (
offset.size() == 4 &&
int(offset[0] + column) >= 0 &&
int(offset[1] + source) >= 0 &&
int(offset[2] + in_line) >= 0 &&
int(offset[3] + in_col) >= 0
) {
row->addEntry(Entry(
column += offset[0],
source += offset[1],
in_line += offset[2],
in_col += offset[3]
));
}
else if (
offset.size() == 5 &&
int(offset[0] + column) >= 0 &&
int(offset[1] + source) >= 0 &&
int(offset[2] + in_line) >= 0 &&
int(offset[3] + in_col) >= 0 &&
int(offset[4] + token) >= 0
) {
row->addEntry(Entry(
column += offset[0],
source += offset[1],
in_line += offset[2],
in_col += offset[3],
token += offset[4]
));
}
// empty rows are allowed
else if (offset.size() != 0) {
// everything else is not valid
throw(runtime_error("invalid source map entry"));
}
// create a new row
if (*it == ';') {
map.addNewLine();
row = &map.rows.back();
column = 0; }
// clear for next
offset.clear();
// exit loop if at end
if (it == end) break;
} else {
// parse a vlq number and put to offset
offset.push_back(decodeVLQ(it, end));
}
// advance
++it;
}
}