add operator<< for packets #14

Merged
Persson-dev merged 3 commits from operator into main 2025-03-13 15:20:38 +00:00
Showing only changes of commit 799c2923f9 - Show all commits

View File

@@ -3,23 +3,29 @@
// Lifted from Jerry Coffin's 's prefix_ostream_iterator // Lifted from Jerry Coffin's 's prefix_ostream_iterator
#pragma once #pragma once
#include <iterator>
#include <ostream> #include <ostream>
#include <sp/protocol/Field.h> #include <sp/protocol/Field.h>
namespace sp { namespace sp {
template <class T, class charT = char, class traits = std::char_traits<charT>> template <class T, class charT = char, class traits = std::char_traits<charT>>
class OstreamFieldIterator : public std::iterator<std::output_iterator_tag, void, void, void, void> { class OstreamFieldIterator {
private: private:
std::basic_ostream<charT, traits>* m_Os; std::basic_ostream<charT, traits>* m_Os;
std::string m_Delimiter; std::string m_Delimiter;
bool m_FirstElem; bool m_FirstElem;
public: public:
typedef charT char_type; using iterator_category = std::output_iterator_tag;
typedef traits traits_type; using value_type = void;
typedef std::basic_ostream<charT, traits> ostream_type; using difference_type = void;
using pointer = void;
using reference = void;
using char_type = charT;
using traits_type = traits;
using ostream_type = std::basic_ostream<charT, traits>;
OstreamFieldIterator(ostream_type& a_Stream) : m_Os(&a_Stream), m_Delimiter(0), m_FirstElem(true) {} OstreamFieldIterator(ostream_type& a_Stream) : m_Os(&a_Stream), m_Delimiter(0), m_FirstElem(true) {}
OstreamFieldIterator(ostream_type& a_Stream, std::string&& a_Delimiter) : OstreamFieldIterator(ostream_type& a_Stream, std::string&& a_Delimiter) :
m_Os(&a_Stream), m_Delimiter(std::move(a_Delimiter)), m_FirstElem(true) {} m_Os(&a_Stream), m_Delimiter(std::move(a_Delimiter)), m_FirstElem(true) {}