Back to index

nordugrid-arc-nox  1.1.0~rc6
StringConv.h
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil -*-
00002 
00003 #ifndef ARCLIB_STRINGCONV
00004 #define ARCLIB_STRINGCONV
00005 
00006 #include <iomanip>
00007 #include <sstream>
00008 #include <string>
00009 #include <vector>
00010 
00011 #include "Logger.h"
00012 
00013 namespace Arc {
00014   extern Logger stringLogger;
00015 
00017   template<typename T>
00018   T stringto(const std::string& s) {
00019     T t;
00020     if (s.empty()) {
00021       stringLogger.msg(ERROR, "Empty string");
00022       return 0;
00023     }
00024     std::stringstream ss(s);
00025     ss >> t;
00026     if (ss.fail()) {
00027       stringLogger.msg(ERROR, "Conversion failed: %s", s);
00028       return 0;
00029     }
00030     if (!ss.eof())
00031       stringLogger.msg(WARNING, "Full string not used: %s", s);
00032     return t;
00033   }
00034 
00036   template<typename T>
00037   bool stringto(const std::string& s, T& t) {
00038     t = 0;
00039     if (s.empty())
00040       return false;
00041     std::stringstream ss(s);
00042     ss >> t;
00043     if (ss.fail())
00044       return false;
00045     if (!ss.eof())
00046       return false;
00047     return true;
00048   }
00049 
00050 
00051 #define stringtoi(A) stringto < int > ((A))
00052 #define stringtoui(A) stringto < unsigned int > ((A))
00053 #define stringtol(A) stringto < long > ((A))
00054 #define stringtoll(A) stringto < long long > ((A))
00055 #define stringtoul(A) stringto < unsigned long > ((A))
00056 #define stringtoull(A) stringto < unsigned long long > ((A))
00057 #define stringtof(A) stringto < float > ((A))
00058 #define stringtod(A) stringto < double > ((A))
00059 #define stringtold(A) stringto < long double > ((A))
00060 
00061 
00063   template<typename T>
00064   std::string tostring(T t, const int width = 0, const int precision = 0) {
00065     std::stringstream ss;
00066     if (precision)
00067       ss << std::setprecision(precision);
00068     ss << std::setw(width) << t;
00069     return ss.str();
00070   }
00071 
00073   std::string lower(const std::string& s);
00074 
00076   std::string upper(const std::string& s);
00077 
00079   void tokenize(const std::string& str, std::vector<std::string>& tokens,
00080                 const std::string& delimiters = " ");
00081   void tokenize(const std::string& str, std::list<std::string>& tokens,
00082                 const std::string& delimiters = " ");
00083 
00085   std::string trim(const std::string& str, const char *sep = NULL);
00086 
00088   std::string strip(const std::string& str);
00089 
00091   std::string uri_unescape(const std::string& str);
00092 
00094   std::string convert_to_rdn(const std::string& dn);
00095 
00096 } // namespace Arc
00097 
00098 #endif // ARCLIB_STRINGCONV