Files
Nasal-Interpreter/version3.0/nasal_resource.h
T
Valk Richard Li 7f73a2f5ae update
2020-06-14 02:41:45 -07:00

97 lines
1.9 KiB
C++

#ifndef __NASAL_RESOURCE_H__
#define __NASAL_RESOURCE_H__
/* filenames of lib files */
#ifndef LIB_FILE_NUM
#define LIB_FILE_NUM 11
const std::string lib_filename[LIB_FILE_NUM]=
{
"lib/base.nas",
"lib/bits.nas",
"lib/io.nas",
"lib/math.nas",
"lib/readline.nas",
"lib/regex.nas",
"lib/sqlite.nas",
"lib/system.nas",
"lib/thread.nas",
"lib/unix.nas",
"lib/utf8.nas"
};
#endif
class nasal_resource
{
private:
std::vector<char> res;
public:
void input_file(std::string);
void load_lib();
void clear();
void print_file();
std::vector<char>& get_file();
};
void nasal_resource::input_file(std::string filename)
{
std::ifstream fin(filename,std::ios::binary);
if(fin.fail())
{
std::cout<<">> [resource] cannot open file \'"<<filename<<"\'."<<std::endl;
fin.close();
return;
}
while(!fin.eof())
{
char c=fin.get();
if(fin.eof()) break;
res.push_back(c);
}
fin.close();
return;
}
void nasal_resource::load_lib()
{
for(int i=0;i<LIB_FILE_NUM;++i)
this->input_file(lib_filename[i]);
return;
}
void nasal_resource::clear()
{
res.clear();
return;
}
void nasal_resource::print_file()
{
int size=res.size(),line=1;
std::cout<<line<<"\t";
std::string unicode_str="";
for(int i=0;i<size;++i)
{
if(res[i]>=0 && unicode_str.length())
{
std::cout<<unicode_str;
unicode_str="";
}
if(32<=res[i]) std::cout<<res[i];
else if(res[i]<0) unicode_str+=res[i];
else std::cout<<" ";
if(res[i]=='\n')
{
++line;
std::cout<<std::endl<<line<<"\t";
}
}
std::cout<<(unicode_str.length()?unicode_str:"")<<std::endl;
return;
}
std::vector<char>& nasal_resource::get_file()
{
return res;
}
#endif