#include "cpps/cpps.h"namespace cpps{cppsbuffer::cppsbuffer(const char* _filename, const char* _buffer, int32 _buffersize){cppsbuffer_file file;file.filename = _filename;file.begin = 0;file.end = _buffersize;file.line = 1;files.push_back(file);buffer.append(_buffer, (size_t)_buffersize);buffersize = _buffersize;bufferoffset = 0;}char cppsbuffer::pop(){//检测是不是注释if (realcur() == '/'){if (at(offset() + 1) == '/'){realpop(); //pop first /realpop(); //pop second /while (!isend() && cur() != '\n')realpop();}else if (at(offset() + 1) == '*'){realpop();realpop();while (!isend()){if (realcur() == '*'){if (at(offset() + 1) == '/'){realpop();realpop();break;}}realpop();}}}return realpop();}char cppsbuffer::realpop(){if (isend()){throw(cpps_error(getcurfile().filename.c_str(), getcurfile().line, 0, "Unknown end of file."));}int32 ret = bufferoffset++;if (ret >= (getcurfile().end)) {if (files.size() > 1) { files.pop_back(); }}if (buffer[(size_t)ret] == '\n')getcurfile().line++;return buffer[(size_t)ret];}char cppsbuffer::cur(){//检测是不是注释if (realcur() == '/'){if (at(offset() + 1) == '/'){realpop(); //pop first /realpop(); //pop second /while (!isend() && cur() != '\n')realpop();}else if (at(offset() + 1) == '*'){realpop();realpop();while (!isend()){if (realcur() == '*'){if (at(offset() + 1) == '/'){realpop();realpop();break;}}realpop();}}}return realcur();}char cppsbuffer::realcur(){return buffer[(size_t)bufferoffset];}char cppsbuffer::at(int32 off){return buffer[(size_t)off];}cpps::int32 cppsbuffer::offset(){return bufferoffset;}std::string cppsbuffer::substr(int32 off, int32 len){return buffer.substr(off, len);}void cppsbuffer::seek(int32 off){bufferoffset = off;}bool cppsbuffer::isend(){return bufferoffset == buffersize || (realcur() == EOF) || (realcur() == 0);}cpps::int32 cppsbuffer::line(){return getcurfile().line;}void cppsbuffer::append(std::string _filename, const char* _buffer, int32 _buffersize){cppsbuffer_file file;file.filename = _filename;file.begin = bufferoffset;file.end = file.begin + _buffersize;file.line = 1;for (auto& f : files){f.end += _buffersize;}files.push_back(file);buffer.insert((size_t)bufferoffset, _buffer, (size_t)_buffersize);buffersize += _buffersize;}cpps::cppsbuffer_file& cppsbuffer::getcurfile(){return files.back();}inline cppsbuffer_file::cppsbuffer_file() {begin = 0;end = 0;line = 0;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型