74
78
return trim_begin(trim_end(seq));
81
// Consider rewritting such that m_seq is replaced by first/last.
82
template <typename Sequence>
83
class split_iterator_t {
85
typedef typename Sequence::const_iterator const_iterator;
86
typedef typename Sequence::value_type value_type;
90
split_iterator_t(const Sequence& seq, value_type delim) :
94
m_next(std::find(seq.begin(), seq.end(), delim)) {
97
Sequence operator * () { return Sequence(m_pos, m_next); }
99
split_iterator_t& operator ++ () {
102
if (m_pos == m_seq->end())
106
m_next = std::find(m_pos, m_seq->end(), m_delim);
111
bool operator == (const split_iterator_t& itr) const { return m_pos == m_seq->end(); }
112
bool operator != (const split_iterator_t& itr) const { return m_pos != m_seq->end(); }
115
const Sequence* m_seq;
117
const_iterator m_pos;
118
const_iterator m_next;
121
template <typename Sequence>
122
inline split_iterator_t<Sequence>
123
split_iterator(const Sequence& seq, typename Sequence::value_type delim) {
124
return split_iterator_t<Sequence>(seq, delim);
127
template <typename Sequence>
128
inline split_iterator_t<Sequence>
129
split_iterator(const Sequence& seq) {
130
return split_iterator_t<Sequence>();
133
template <int pos, typename Value>
135
value_to_hexchar(Value v) {
142
return 'A' + v - 0xA;
145
template <typename InputIterator, typename OutputIterator>
147
copy_escape_html(InputIterator first, InputIterator last, OutputIterator dest) {
148
while (first != last) {
149
if (std::isalpha(*first) ||
150
std::isdigit(*first) ||
156
*(dest++) = value_to_hexchar<1>(*first);
157
*(dest++) = value_to_hexchar<0>(*first);
166
template <typename Sequence>
168
copy_escape_html(const Sequence& src) {
170
copy_escape_html(src.begin(), src.end(), std::back_inserter(dest));
175
// Consider support for larger than char type.
176
template <typename InputIterator, typename OutputIterator>
178
transform_hex(InputIterator first, InputIterator last, OutputIterator dest) {
179
while (first != last) {
180
*(dest++) = value_to_hexchar<1>(*first);
181
*(dest++) = value_to_hexchar<0>(*first);
189
template <typename Sequence>
191
transform_hex(const Sequence& src) {
193
transform_hex(src.begin(), src.end(), std::back_inserter(dest));
198
template <typename Sequence>
200
generate_random(size_t length) {
204
std::generate_n(std::back_inserter(s), length, &std::rand);