#include using namespace std; namespace icl{ namespace ioutils{ string toLower(string s){ // {{{ open for(unsigned int i=0;i vec3(int a, int b, int c){ vector v(3); v[0] = a; v[1] = b; v[2] = c; return v; } bool endsWith(const string &s,const string &postfix){ return s.length() >= postfix.length() && s.substr(s.length()-postfix.length()) == postfix; } bool startsWith(const string &s, const string &praefix){ return s.find(praefix) == 0; } void analyseHashes (const string &sFileName, unsigned int& nHashes, string::size_type& iPostfixPos) { nHashes = 0; iPostfixPos = string::npos; // search for first '.' string::size_type iTmpPos = sFileName.rfind ('.'); if (iTmpPos == string::npos) throw ICLException ("cannot detect file type"); // search for second '.' if the postfix is .gz so far const string& sType = sFileName.substr (iTmpPos); if (sType == ".gz" && iTmpPos > 0) { // search further for file type iPostfixPos = sFileName.rfind ('.', iTmpPos-1); } if (iPostfixPos == string::npos) iPostfixPos = iTmpPos; // count number of hashes directly before the postfix for (string::const_reverse_iterator start (sFileName.begin() + iPostfixPos), it = start, end = sFileName.rend(); it != end; ++it) { if (*it != '#') { // first pos without hash, count hashes nHashes = it - start; break; } } } } }