versatile-mcmc  0.1.7
stringutils.hpp
Go to the documentation of this file.
1 
13 #ifndef VMCMC_STRINGUTILS_H_
14 #define VMCMC_STRINGUTILS_H_
15 
16 #include <vmcmc/typetraits.hpp>
17 
18 #include <sstream>
19 #include <string>
20 #include <utility>
21 
22 namespace vmcmc
23 {
24 
25 class Sample;
26 
36 template <typename SequenceT, typename SeparatorT>
37 inline std::ostream& join(std::ostream& stream, const SequenceT& sequence, const SeparatorT& separator = "")
38 {
39  auto itBegin = std::begin(sequence);
40  auto itEnd = std::end(sequence);
41 
42  if (itBegin != itEnd) {
43  stream << *itBegin;
44  ++itBegin;
45  }
46 
47  for (; itBegin != itEnd; ++itBegin) {
48  stream << separator << *itBegin;
49  }
50 
51  return stream;
52 }
53 
61 template <typename SequenceT, typename SeparatorT>
62 inline std::string join(const SequenceT& sequence, const SeparatorT& separator, int floatPrecision = -1)
63 {
64  std::ostringstream strm;
65  if (floatPrecision > -1)
66  strm.precision(floatPrecision);
67  join(strm, sequence, separator);
68  return strm.str();
69 }
70 
77 std::ostream& operator<< (std::ostream& strm, const Sample& sample);
78 
85 template <typename T1, typename T2>
86 inline std::ostream& operator<< (std::ostream& strm, const std::pair<T1, T2>& pair)
87 {
88  strm << "(" << pair.first << ", " << pair.second << ")";
89  return strm;
90 }
91 
98 template <typename ContainerT, class = typename std::enable_if<vmcmc::is_container<ContainerT>::value>::type>
99 inline std::ostream& operator<< (std::ostream& strm, const ContainerT& container)
100 {
101  strm << "[" << container.size() << "](";
102 
103  auto itBegin = std::begin(container);
104  auto itEnd = std::end(container);
105 
106  if (itBegin != itEnd) {
107  strm << *itBegin;
108  itBegin++;
109  }
110 
111  for (; itBegin != itEnd; ++itBegin) {
112  strm << ", " << *itBegin;
113  }
114 
115  strm << ")";
116 
117  return strm;
118 }
119 
120 }
121 
122 #endif /* VMCMC_STRINGUTILS_H_ */
Definition: algorithm.cpp:28
std::ostream & join(std::ostream &stream, const SequenceT &sequence, const SeparatorT &separator="")
Join an STL style container and output to a stream with its values joined by a separator.
Definition: stringutils.hpp:37
Typetrait utility structs.
A &#39;sample&#39; represents a node or data point in a Markov Chain.
Definition: sample.hpp:31