Telnet++
A C++ library for interacting with Telnet streams
generator.hpp
1 #pragma once
2 
3 #include "telnetpp/detail/generate_helper.hpp"
4 #include <algorithm>
5 #include <iterator>
6 #include <utility>
7 
8 namespace telnetpp { namespace detail {
9 
10 //* =========================================================================
14 //* =========================================================================
15 template <class InputIterator1, class InputIterator2>
16 auto generate(InputIterator1 begin, InputIterator2 end)
17 {
18  typedef boost::variant<u8stream, boost::any> result;
19  std::vector<result> results;
20  u8stream stream;
21 
22  std::for_each(begin, end, [&results, &stream](auto &&token)
23  {
24  if (token.type() == typeid(element))
25  {
26  detail::generate_helper(
27  stream,
28  boost::get<element>(token));
29  }
30  else
31  {
32  if (!stream.empty())
33  {
34  results.push_back(result(stream));
35  stream.clear();
36  }
37 
38  results.push_back(result(boost::get<boost::any>(token)));
39  }
40  });
41 
42  if (!stream.empty())
43  {
44  results.push_back(result(stream));
45  }
46 
47  return results;
48 }
49 
50 //* =========================================================================
53 //* =========================================================================
54 template <class Collection>
55 auto generate(Collection &&collection)
56 {
57  using std::begin;
58  using std::end;
59 
60  return generate(begin(collection), end(collection));
61 }
62 
63 }}
Definition: byte_converter.hpp:4