RepositoryUtilities.h
Dosyayı İndir
#ifndef REPOSITORYUTILITIES_H_INCLUDED
#define REPOSITORYUTILITIES_H_INCLUDED
#include <vector>
#include <iostream>
#include <sstream>
#define LINE_DELIMITER '\n'
#define CELL_DELIMITER '\t'
using namespace std;
// Type Conversions
long string_to_long(string text){
stringstream ss(text);
long number;
ss>>number;
return number;
}
string long_to_string(long number){
stringstream ss;
ss<<number;
string text=ss.str();
return text;
}
double string_to_double(string text){
stringstream ss(text);
double number;
ss>>number;
return number;
}
string double_to_string(double number){
stringstream ss;
ss<<number;
string text=ss.str();
return text;
}
// String Vector Split & Build
vector<string> split_vector(const string &text, const char cellDelimiter=CELL_DELIMITER){
stringstream ss(text);
string element;
vector<string> elements;
while(getline(ss,element,cellDelimiter))
{
elements.push_back(element);
}
return elements;
}
string build_vector(vector<string> &elements,const char cellDelimiter=CELL_DELIMITER){
stringstream ss;
for(vector<string>::iterator i = elements.begin();i != elements.end();i++){
ss<<*i<<cellDelimiter;
}
string text = ss.str();
return text;
}
// String Vector Read & Write
void write_vector(ostream &os,vector<string> &elements,const char lineDelimiter=LINE_DELIMITER){
for(vector<string>::iterator i = elements.begin();i != elements.end();i++){
os<<*i<<lineDelimiter;
}
}
void read_vector(istream &is,vector<string> &elements,const char lineDelimiter=LINE_DELIMITER){
string line;
while (getline(is, line,lineDelimiter))
{
elements.push_back(line);
}
}
// String Vector of Vector Read & Write
void write_vector(ostream &os,vector<vector<string>> &cells,const char cellDelimiter=CELL_DELIMITER, const char lineDelimiter=LINE_DELIMITER){
for(vector<vector<string>>::iterator i = cells.begin();i != cells.end();i++){
//string line=build_vector(*i,cellDelimiter);
//os<<line<<endl;
for(vector<string>::iterator j = i->begin();j != i->end();j++){
os<<*j<<cellDelimiter;
}
os<<lineDelimiter;
}
}
void read_vector(istream &is,vector<vector<string>> &cells,const char cellDelimiter=CELL_DELIMITER, const char lineDelimiter=LINE_DELIMITER){
string line;
while (getline(is, line))
{
//vector<string> elements=split_vector(line,cellDelimiter);
stringstream ss(line);
string element;
vector<string> elements;
while(getline(ss,element,cellDelimiter))
{
elements.push_back(element);
}
cells.push_back(elements);
}
}
// Any Type Vector Read & Write
template<class T>
class IConverter{
public:
virtual T fromString(string text)=0;
virtual string toString(T object)=0;
};
template<class T>
void write_vector(ostream &os,vector<T> &elements,IConverter<T> &converter,const char lineDelimiter=LINE_DELIMITER){
for(typename vector<T>::iterator i = elements.begin();i != elements.end();i++){
T object=*i;
string text=converter.toString(object);
os<<text<<lineDelimiter;
}
}
template<class T>
void read_vector(istream &is,vector<T> &elements,IConverter<T> &converter,const char lineDelimiter=LINE_DELIMITER){
string line;
while (getline(is, line,lineDelimiter))
{
T object=converter.fromString(line);
elements.push_back(object);
}
}
#endif
Dosyayı İndir