本文整理汇总了C++中irept::line方法的典型用法代码示例。如果您正苦于以下问题:C++ irept::line方法的具体用法?C++ irept::line怎么用?C++ irept::line使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类irept
的用法示例。
在下文中一共展示了irept::line方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get_code
void get_code(const irept &location, std::string &dest)
{
dest = "";
const irep_idt &file = location.file();
const irep_idt &line = location.line();
if(file == "" || line == "")
return;
std::ifstream in(file.c_str());
if(!in)
return;
int line_int = atoi(line.c_str());
int line_start = line_int - 3, line_end = line_int + 3;
if(line_start <= 1)
line_start = 1;
// skip line_start-1 lines
for(int l = 0; l < line_start - 1; l++)
{
std::string tmp;
std::getline(in, tmp);
}
// read till line_end
std::list<linet> lines;
for(int l = line_start; l <= line_end && in; l++)
{
lines.emplace_back();
std::string &line = lines.back().text;
std::getline(in, line);
if(!line.empty() && line[line.size() - 1] == '\r')
line.resize(line.size() - 1);
lines.back().line_number = l;
}
// remove empty lines at the end and at the beginning
for(std::list<linet>::iterator it = lines.begin(); it != lines.end();)
{
if(is_empty_str(it->text))
it = lines.erase(it);
else
break;
}
for(std::list<linet>::iterator it = lines.end(); it != lines.begin();)
{
it--;
if(is_empty_str(it->text))
it = lines.erase(it);
else
break;
}
// strip space
strip_space(lines);
// build dest
for(auto &line : lines)
{
std::string line_no = i2string(line.line_number);
while(line_no.size() < 4)
line_no = " " + line_no;
std::string tmp = line_no + " " + escape_latex(line.text, true);
if(line.line_number == line_int)
tmp = emphasize(tmp);
dest += tmp + "\n";
}
}