00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00038 #ifndef SFL_STRUTIL_HPP
00039 #define SFL_STRUTIL_HPP
00040
00041
00042 #include <string>
00043 #include <sstream>
00044
00045
00046 namespace wbcnet {
00047
00048 template<typename displayable_t, typename prefix_t>
00049 std::string displayString(displayable_t const & displayable, prefix_t const & prefix)
00050 {
00051 std::ostringstream result;
00052 displayable.display(result, prefix);
00053 return result.str();
00054 }
00055
00056 }
00057
00058
00059 namespace sfl {
00060
00062 template<typename Foo>
00063 std::string to_string(const Foo & foo) {
00064 std::ostringstream os;
00065 os << foo;
00066 return os.str();
00067 }
00068
00070 template<>
00071 std::string to_string<bool>(const bool & flag);
00072
00074 template<typename Foo>
00075 bool string_to(const std::string & str, Foo & foo) {
00076 Foo bar;
00077 std::istringstream is(str);
00078 if( ! (is >> bar))
00079 return false;
00080 foo = bar;
00081 return true;
00082 }
00083
00089 template<>
00090 bool string_to<bool>(const std::string & str, bool & foo);
00091
00096 template<typename Foo>
00097 bool string_to_bool(const std::string & str, Foo & foo) {
00098 bool bar;
00099 if( ! string_to(str, bar))
00100 return false;
00101 foo = bar ? 1 : 0;
00102 return true;
00103 }
00104
00105
00130 bool splitstring(std::string const & input, char separator,
00131 std::string & head, std::string & tail);
00132
00133
00138 template<typename tokenlist_t>
00139 size_t tokenize(std::string const & input, char separator, tokenlist_t & output) {
00140 std::string head;
00141 std::string tail(input);
00142 while (splitstring(tail, separator, head, tail))
00143 output.push_back(head);
00144 output.push_back(head);
00145 return output.size();
00146 }
00147
00148
00153 template<typename tokenlist_t, typename value_t>
00154 bool token_to(tokenlist_t const & tokenlist, size_t index, value_t & value) {
00155 if (index >= tokenlist.size())
00156 return false;
00157 return string_to(tokenlist[index], value);
00158 }
00159
00160 }
00161
00162 #endif // SFL_STRUTIL_HPP