13 #ifndef VMCMC_STRINGUTILS_H_ 14 #define VMCMC_STRINGUTILS_H_ 36 template <
typename SequenceT,
typename SeparatorT>
37 inline std::ostream&
join(std::ostream& stream,
const SequenceT& sequence,
const SeparatorT& separator =
"")
39 auto itBegin = std::begin(sequence);
40 auto itEnd = std::end(sequence);
42 if (itBegin != itEnd) {
47 for (; itBegin != itEnd; ++itBegin) {
48 stream << separator << *itBegin;
61 template <
typename SequenceT,
typename SeparatorT>
62 inline std::string
join(
const SequenceT& sequence,
const SeparatorT& separator,
int floatPrecision = -1)
64 std::ostringstream strm;
65 if (floatPrecision > -1)
66 strm.precision(floatPrecision);
67 join(strm, sequence, separator);
77 std::ostream& operator<< (std::ostream& strm,
const Sample& sample);
85 template <
typename T1,
typename T2>
86 inline std::ostream& operator<< (std::ostream& strm, const std::pair<T1, T2>& pair)
88 strm <<
"(" << pair.first <<
", " << pair.second <<
")";
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)
101 strm <<
"[" << container.size() <<
"](";
103 auto itBegin = std::begin(container);
104 auto itEnd = std::end(container);
106 if (itBegin != itEnd) {
111 for (; itBegin != itEnd; ++itBegin) {
112 strm <<
", " << *itBegin;
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 'sample' represents a node or data point in a Markov Chain.
Definition: sample.hpp:31