00001 #ifndef STRING_UTIL
00002 #define STRING_UTIL
00003
00004 #include <string>
00005 #include <vector>
00006 #include "range.hh"
00007
00008
00009 class StringUtil {
00011 public:
00012
00014
00015 static std::string Strip(const std::string& s, const char& x = '\0');
00016
00018 static std::string StripNull(const std::string& s);
00019
00021 static std::string Trim(const std::string& s);
00022
00024
00025 static std::string CentreString(const std::string& text, const int& fieldwidth,
00026 const int& cenpos=0);
00027
00029 static std::string PadString(const std::string& text, const int& fieldwidth);
00030
00032 static std::string RightString(const std::string& text, const int& fieldwidth);
00033
00035 static std::string LeftString(const std::string& text, const int& fieldwidth);
00036
00038 static std::vector<std::string> split(const std::string& str,
00039 const std::string& sep);
00040
00042 static std::vector<std::string> split(const std::string& str,
00043 const std::string& sep1, const std::string& sep2);
00044
00046 static std::string MakeXMLtag(const std::string& tag, const std::string& data);
00047
00049 static std::string ftos(const float f, const int w, const int d);
00050
00052 static std::string etos(const float f, const int w, const int d);
00053
00055 static std::string ftos(const double f, const int w, const int d);
00056
00058 static std::string etos(const double f, const int w, const int d);
00059
00061
00067 static std::string WrapLine(const std::string& line,
00068 const int& pagewidth, const int& nindent, const std::string& sepc=" ");
00069
00070
00071 static std::string formatFraction(const double& fr, const int& width);
00073
00076
00077 static std::string ToUpper(const std::string& s);
00079
00081 static std::string BuftoLine(const std::string buf);
00082
00084 static std::string FormatSaveVector(const std::vector<int> ivec);
00085
00087 static std::string FormatSaveVector(const std::vector<double> vec);
00088 };
00089
00091 class FormatOutput {
00092 public:
00094
00095 static std::string logTab(const int& tab, const std::string& text);
00097 static std::string logTabPrintf(const int& tab,
00098 const char* formattext,...);
00099 static std::string logWarning(const std::string& text);
00100 };
00101
00103 class Numberfield {
00104 public:
00105 Numberfield():type(-1),width(-1) {}
00107
00113 Numberfield(const int& Type, const int& Width, const int& Dec,
00114 const std::string& Label1="", const std::string& Label2="")
00115 :type(Type),width(Width),dec(Dec),label1(Label1),label2(Label2){}
00116
00118 void init(const int& Type, const int& Width, const int& Dec,
00119 const std::string& Label1="", const std::string& Label2="");
00120
00122
00127 Numberfield(const bool& IntType, const float& MaxValue,
00128 const int& MinWidth, const int& Precision);
00129
00131
00136 void init(const bool& IntType, const float& MaxValue,
00137 const int& MinWidth, const int& Precision);
00138
00139 int type;
00140 int width;
00141 int dec;
00142 scala::Range range;
00143 std::string label1;
00144 std::string label2;
00145 };
00146
00147
00148 #endif