aboutsummaryrefslogtreecommitdiff
path: root/source/lib/src/message.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2023-08-17 12:32:50 +0200
committerFelix Morgner <felix.morgner@gmail.com>2023-08-17 12:32:50 +0200
commit375799fa79d1af76f33299acc20a11a167a021f8 (patch)
tree8f91b982ec96225c33a2f4871730ababffe5cab0 /source/lib/src/message.cpp
parentaf471b9b780869915d3217b228e24d025892de47 (diff)
downloadwanda-375799fa79d1af76f33299acc20a11a167a021f8.tar.xz
wanda-375799fa79d1af76f33299acc20a11a167a021f8.zip
project: restructure libraries and build env
Diffstat (limited to 'source/lib/src/message.cpp')
-rw-r--r--source/lib/src/message.cpp75
1 files changed, 0 insertions, 75 deletions
diff --git a/source/lib/src/message.cpp b/source/lib/src/message.cpp
deleted file mode 100644
index 34930bc..0000000
--- a/source/lib/src/message.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "wanda/message.hpp"
-
-#include <ios>
-#include <iterator>
-#include <sstream>
-
-namespace wanda
-{
- message::operator std::string() const
- {
- std::ostringstream buffer{};
- buffer << source
- << ':'
- << command;
- if (argument.has_value())
- {
- buffer << ':' << *argument;
- }
- return buffer.str();
- }
-
- std::size_t message::size() const
- {
- return static_cast<std::string>(*this).size();
- }
-
- template<typename InputIt, typename OutputIt, typename UnaryPredicate>
- OutputIt copy_until(InputIt first, InputIt last, OutputIt out, UnaryPredicate predicate)
- {
- while (first != last && !predicate(*first))
- {
- *out++ = *first++;
- }
- return out;
- }
-
- std::istream & operator>>(std::istream & in, message & message)
- {
- auto pos = std::istream_iterator<char>{in};
- auto end = std::istream_iterator<char>{};
- auto buffer = std::string{};
-
- copy_until(pos, end, std::back_inserter(buffer), [](auto const & c) { return c == ':'; });
- if (in.eof() || buffer.size() != 1)
- {
- in.setstate(std::ios_base::failbit);
- return in;
- }
- message.source = buffer;
-
- buffer.clear();
- copy_until(++pos, end, std::back_inserter(buffer), [](auto const & c) { return c == ':'; });
- if (in.eof())
- {
- in.setstate(std::ios_base::failbit);
- }
- message.command = buffer;
-
- buffer.clear();
- copy(++pos, end, std::back_inserter(buffer));
- if (buffer.size())
- {
- message.argument = std::optional{std::move(buffer)};
- }
-
- in.clear(in.rdstate() ^ std::ios_base::failbit);
- return in;
- }
-
- std::ostream & operator<<(std::ostream & out, message const & message)
- {
- return out << static_cast<std::string>(message);
- }
-
-} // namespace wanda \ No newline at end of file