📄 templatecontainer.cpp
字号:
#include "TemplateContainer.h"TemplateContainer::TemplateContainer() {}TemplateContainer::TemplateContainer(const char *t_name) { int f; struct stat st; string err; char r_path[PATH_MAX]; f=open(t_name,O_RDONLY); if(f==-1) { err=string("Cannot open ")+t_name+" reason:"+strerror(errno); goto OPEN_FAILED; } if(fstat(f,&st)==-1) { err=string("Cannot stat ")+t_name+" reason:"+strerror(errno); goto STAT_FAILED; } template_size=st.st_size; tmpl=(char *)mmap(0,template_size,PROT_READ,MAP_SHARED,f,0); if(long(tmpl)==-1) { err=string("Failed to map ")+t_name+" reason:"+strerror(errno); goto MMAP_FAILED; } line=1; pos=0; cur=0; prev_pos=0; if(!realpath(t_name,r_path)) { err=string("Cannot get realpath for")+t_name+" reason:"+strerror(errno); goto REAL_PATH_FAILED; } template_dir=r_path; template_dir=template_dir.erase(template_dir.rfind("/")); return;REAL_PATH_FAILED:MMAP_FAILED:STAT_FAILED: close(f);OPEN_FAILED: throw TemplateError(err);}TemplateContainer::~TemplateContainer() { if(munmap(tmpl,template_size)==-1) throw TemplateError(string("Failed to munmap reason:")+strerror(errno));}char TemplateContainer::next() { char c; if(cur==template_size) return 0; c=tmpl[cur]; cur++; if(c=='\n') { line++; prev_pos=pos; pos=0; } else { pos++; } return c; }void TemplateContainer::prev() { if(cur) cur--; if(pos) pos--; else { if(line) { line--; pos=prev_pos; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -