steventango's picture
Upload folder using huggingface_hub
d5062c8 verified
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <cmath>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include "runn.h"
#include "FBase.h"
using namespace std;
namespace iret {
FBase::FBase(const char *typ,const char *nam){
int lxn=strlen(typ);
type=new char[lxn+1];
tpnm=-1;
nmnm=-1;
strcpy(type,typ);
lxn=strlen(nam);
name=new char[lxn+1];
strcpy(name,nam);
cflag=0;
oflag=0;
pflag=get_qflag();
eflag=1;
}
FBase::FBase(const char *typ,int tpn,const char *nam){
int lxn=strlen(typ);
type=new char[lxn+1];
tpnm=tpn;
nmnm=-1;
strcpy(type,typ);
lxn=strlen(nam);
name=new char[lxn+1];
strcpy(name,nam);
cflag=0;
oflag=0;
pflag=get_qflag();
eflag=1;
}
FBase::FBase(const char *typ,const char *nam,const char *pt){
int lxn=strlen(typ);
type=new char[lxn+1];
tpnm=-1;
nmnm=-1;
strcpy(type,typ);
lxn=strlen(nam);
name=new char[lxn+1];
strcpy(name,nam);
cflag=0;
oflag=0;
pflag=get_qflag();
if(*pt!=':')set_path_name(pt);
else set_path_internal(pt+1);
}
FBase::~FBase(void){
delete [] type;
delete [] name;
}
void FBase::set_type_num(int tn){tpnm=tn;}
void FBase::set_name_num(int nn){nmnm=nn;}
void FBase::change_type(const char *typ){
if(type!=NULL)delete [] type;
int lxn=strlen(typ);
type=new char[lxn+1];
strcpy(type,typ);
}
void FBase::change_name(const char *nam){
if(name!=NULL)delete [] name;
int lxn=strlen(nam);
name=new char[lxn+1];
strcpy(name,nam);
}
void FBase::set_name(const char *nam){
if(name!=NULL)delete [] name;
int lxn=strlen(nam);
name=new char[lxn+1];
strcpy(name,nam);
}
void FBase::subname(const char *tph,const char *tpl,const char *nm){
char cnam[max_str];
long i=strlen(tpl);
strcpy(cnam,tpl);
cnam[i]='_';
cnam[i+1]='\0';
strcat(cnam,nm);
change_type(tph);
change_name(cnam);
}
void FBase::set_path_internal(const char *pt){
long len;
if(pt&&(len=strlen(pt))){
eflag=0;
path=new char[len+1];
strcpy(path,pt);
}
else eflag=1;
}
void FBase::set_path_name(const char *pa){
long len;
if(pa&&(len=strlen(pa))){
eflag=2;
pnam=new char[len+1];
strcpy(pnam,pa);
}
else eflag=1;
}
void FBase::map_down(FBase *pFb){
pFb->change_type(type);
pFb->change_name(name);
pFb->set_type_num(tpnm);
pFb->set_name_num(nmnm);
pFb->pflag=pflag;
if(eflag==2)pFb->set_path_name(pnam);
else if(!eflag)pFb->set_path_internal(path);
}
void FBase::map_down_sub(FBase *pFb,const char *subtype){
pFb->subname(type,name,subtype);
pFb->set_type_num(tpnm);
pFb->set_name_num(nmnm);
pFb->pflag=pflag;
if(eflag==2)pFb->set_path_name(pnam);
else if(!eflag)pFb->set_path_internal(path);
}
void FBase::get_pathx(char *nam,const char *ch){
char cnam[256];
ifstream fin;
if(eflag==2){
strcpy(cnam,"path_");
strcat(cnam,pnam);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path");
fin.open(cnam,ios::in);
if(!fin.is_open()){
cout << "Path file for type " << type << " does not exist!" << endl;
exit(0);
}
}
fin.getline(nam,256);
fin.close();
}
else if(eflag){
strcpy(cnam,"path_");
strcat(cnam,type);
strcat(cnam,"_");
strcat(cnam,name);
strcat(cnam,".");
strcat(cnam,ch);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path_");
strcat(cnam,type);
strcat(cnam,"_");
strcat(cnam,name);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path_");
strcat(cnam,type);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path");
fin.open(cnam,ios::in);
if(!fin.is_open()){
cout << "Path file for type " << type << " does not exist!" << endl;
exit(0);
}
}
}
}
fin.getline(nam,256);
fin.close();
}
else {
strcpy(nam,path);
}
if(tpnm<0)strcat(nam,type);
else cat_num(type,tpnm,nam);
strcat(nam,"_");
if(nmnm<0)strcat(nam,name);
else cat_num(name,nmnm,nam);
strcat(nam,".");
strcat(nam,ch);
}
void FBase::get_pathx(char *nam,long n,const char *ch){
char cnam[256],bnam[256];
ifstream fin;
if(eflag==2){
strcpy(cnam,"path_");
strcat(cnam,pnam);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path");
fin.open(cnam,ios::in);
if(!fin.is_open()){
cout << "Path file for type " << type << " does not exist!" << endl;
exit(0);
}
}
fin.getline(nam,256);
fin.close();
}
else if(eflag){
strcpy(cnam,"path_");
strcat(cnam,type);
strcat(cnam,"_");
strcat(cnam,name);
strcat(cnam,".");
strcat(cnam,ch);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path_");
strcat(cnam,type);
strcat(cnam,"_");
strcat(cnam,name);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path_");
strcat(cnam,type);
fin.open(cnam,ios::in);
if(!fin.is_open()){
fin.clear();
strcpy(cnam,"path");
fin.open(cnam,ios::in);
if(!fin.is_open()){
cout << "Path file for type " << type << " does not exist!" << endl;
exit(0);
}
}
}
}
fin.getline(nam,256);
fin.close();
}
else {
strcpy(nam,path);
}
if(tpnm<0)strcat(nam,type);
else cat_num(type,tpnm,nam);
strcat(nam,"_");
strcat(nam,add_num(name,n,bnam));
strcat(nam,".");
strcat(nam,ch);
}
char *FBase::add_num(const char *ptr,long n,char *buf){
char cnam[100];
long_str(cnam,n);
strcpy(buf,ptr);
strcat(buf,cnam);
return(buf);
}
char *FBase::cat_num(const char *ptr,long n,char *buf){
char cnam[100];
long_str(cnam,n);
strcat(buf,ptr);
strcat(buf,cnam);
return(buf);
}
int FBase::Gcom(int sflag){
if((cflag&sflag)&&!(oflag&sflag)){
oflag=oflag|sflag;
return(1);
}
else return(0);
}
int FBase::Rcom(int sflag){
if((cflag&sflag)&&(oflag&sflag)){
oflag=oflag&(~sflag);
return(1);
}
else return(0);
}
ifstream *FBase::get_Istr(const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,a);
ifstream *pfin=new ifstream(cnam,mode);
if(pfin->is_open())return(pfin);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
ofstream *FBase::get_Ostr(const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,a);
ofstream *pfout=new ofstream(cnam,mode);
if(pfout->is_open())return(pfout);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
fstream *FBase::get_Fstr(const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,a);
fstream *pfstr=new fstream(cnam,mode);
if(pfstr->is_open())return(pfstr);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
ifstream *FBase::get_Istr(long n,const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,n,a);
ifstream *pfin=new ifstream(cnam,mode);
if(pfin->is_open())return(pfin);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
ofstream *FBase::get_Ostr(long n,const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,n,a);
ofstream *pfout=new ofstream(cnam,mode);
if(pfout->is_open())return(pfout);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
fstream *FBase::get_Fstr(long n,const char *a,ios::openmode mode){
char cnam[max_str];
get_pathx(cnam,n,a);
fstream *pfstr=new fstream(cnam,mode);
if(pfstr->is_open())return(pfstr);
else {
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
}
void FBase::dst_Istr(ifstream *pfin){
if(!pfin)return;
if(!pfin->is_open()){
cout << "File not open!" << endl;
exit(0);
}
delete pfin;
}
void FBase::dst_Ostr(ofstream *pfout){
if(!pfout)return;
if(!pfout->is_open()){
cout << "File not open!" << endl;
exit(0);
}
delete pfout;
}
void FBase::dst_Fstr(fstream *pfstr){
if(!pfstr)return;
if(!pfstr->is_open()){
cout << "File not open!" << endl;
exit(0);
}
delete pfstr;
}
long FBase::get_Fsiz(const char *a){
if(!Exists(a))return(0);
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size \
determination" << endl;exit(0);}
::close(fld);
return(datf.st_size);
}
long FBase::get_Fsiz(long n,const char *a){
if(!Exists(n,a))return(0);
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,n,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size \
determination" << endl;exit(0);}
::close(fld);
return(datf.st_size);
}
char *FBase::get_Read(const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size \
determination" << endl;exit(0);}
::close(fld);
char *ptr=new char[datf.st_size];
ifstream fin(cnam,ios::in);
if(!fin.is_open()){
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
fin.read(ptr,datf.st_size);
return(ptr);
}
char *FBase::get_Read(long n,const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,n,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size \
determination" << endl;exit(0);}
::close(fld);
char *ptr=new char[datf.st_size];
ifstream fin(cnam,ios::in);
if(!fin.is_open()){
cout << "Error: " << cnam << " failed to open!" << endl;
exit(0);
}
fin.read(ptr,datf.st_size);
return(ptr);
}
char *FBase::get_Mmap(const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
char *ptr=(char*)mmap(0,datf.st_size,PROT_READ,MAP_PRIVATE|MAP_NORESERVE,fld,0);
if(ptr==MAP_FAILED){cout << cnam << " failed to map" << endl;exit(0);}
::close(fld);
return(ptr);
}
char *FBase::get_Mmap(long n,const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,n,a);
fld=::open(cnam,O_RDONLY);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
char *ptr=(char*)mmap(0,datf.st_size,PROT_READ,MAP_PRIVATE|MAP_NORESERVE,fld,0);
if(ptr==MAP_FAILED){cout << cnam << " failed to map" << endl;exit(0);}
::close(fld);
return(ptr);
}
char *FBase::get_Wmap(const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,a);
fld=::open(cnam,O_RDWR);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
char *ptr=(char*)mmap(0,datf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fld,0);
if(ptr==MAP_FAILED){cout << cnam << " failed to map" << endl;exit(0);}
::close(fld);
return(ptr);
}
char *FBase::get_Wmap(long n,const char *a){
int fld;
struct stat datf;
char cnam[max_str];
get_pathx(cnam,n,a);
fld=::open(cnam,O_RDWR);
if(fld<=0){cout << cnam << " failed to open" << endl;exit(0);}
if(fstat(fld,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
char *ptr=(char*)mmap(0,datf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fld,0);
if(ptr==MAP_FAILED){cout << cnam << " failed to map" << endl;exit(0);}
::close(fld);
return(ptr);
}
void FBase::dst_Mmap(const char *a,char *ptr){
struct stat datf;
char cnam[max_str];
if(ptr==NULL){cout << "NULL pointer" << endl;return;}
get_pathx(cnam,a);
if(stat(cnam,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
if(munmap(ptr,datf.st_size)){cout << cnam << " failed to unmap" << endl;exit(0);}
ptr=NULL;
}
void FBase::dst_Mmap(long n,const char *a,char *ptr){
struct stat datf;
char cnam[max_str];
if(ptr==NULL){cout << "NULL pointer" << endl;return;}
get_pathx(cnam,n,a);
if(stat(cnam,&datf)){cout << cnam << " failed on size determination" << endl;exit(0);}
if(munmap(ptr,datf.st_size)){cout << cnam << " failed to unmap" << endl;exit(0);}
ptr=NULL;
}
void FBase::bin_Writ(const char *a,long nm,char *ptr){
ofstream *pfout=get_Ostr(a,ios::out);
long k=100000,i=0;
while(i+k<nm){
pfout->write((char*)ptr,k);
i+=k;
ptr=ptr+k;
}
pfout->write((char*)ptr,nm-i);
pfout->close();
delete pfout;
}
void FBase::bin_Writ(long n,const char *a,long nm,char *ptr){
ofstream *pfout=get_Ostr(n,a,ios::out);
long k=100000,i=0;
while(i+k<nm){
pfout->write((char*)ptr,k);
i+=k;
ptr=ptr+k;
}
pfout->write((char*)ptr,nm-i);
pfout->close();
delete pfout;
}
int FBase::Exists(const char *a){
char cnam[max_str];
get_pathx(cnam,a);
ifstream fin(cnam,ios::in);
if(fin.is_open()){
fin.close();
return(1);
}
else return(0);
}
int FBase::Exists(long n,const char *a){
char cnam[max_str];
get_pathx(cnam,n,a);
ifstream fin(cnam,ios::in);
if(fin.is_open()){
fin.close();
return(1);
}
else return(0);
}
void FBase::mark(long ct, int ivl, const char *what){
if(pflag&&(ct%ivl==0)){
cout << what << " count=" << ct << endl;
}
}
}