From c8e3d1a1a5dbaf4503df950fdae05b69d8744e70 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 7 May 2022 16:18:40 +0300 Subject: Autocommit at 07.05.2022 @ 16:18 --- src/Generic/List/List.hpp | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'src/Generic') diff --git a/src/Generic/List/List.hpp b/src/Generic/List/List.hpp index 4530083..5bbda8a 100644 --- a/src/Generic/List/List.hpp +++ b/src/Generic/List/List.hpp @@ -27,6 +27,9 @@ public: List& operator+=(const List other); + std::istream& read(std::istream& istr); + std::ostream& write(std::ostream& ostr) const; + unsigned get_length() const; unsigned get_count() const; @@ -141,6 +144,31 @@ List& List::operator+=(const List other) { return *this; } +template +std::istream& List::read(std::istream& istr) { + istr.read((char*)&length, sizeof(length)); + istr.read((char*)&count, sizeof(count)); + + delete[] elements; + elements = new T[length]; + + for (int i = 0; i < count; i++) + elements[i].read(istr); + + return istr; +} + +template +std::ostream& List::write(std::ostream& ostr) const { + ostr.write((const char*)&length, sizeof(length)); + ostr.write((const char*)&count, sizeof(count)); + + for (int i = 0; i < count; i++) + elements[i].write(ostr); + + return ostr; +} + template unsigned List::get_length() const { return length; @@ -201,8 +229,7 @@ List& List::operator=(List&& other) { template std::istream& operator>>(std::istream& istr, List& obj) { - istr.read((char*)&obj.length, sizeof(obj.length)); - istr.read((char*)&obj.count, sizeof(obj.count)); + istr >> obj.length >> obj.count; delete[] obj.elements; obj.elements = new T[obj.length]; @@ -215,8 +242,7 @@ std::istream& operator>>(std::istream& istr, List& obj) { template std::ostream& operator<<(std::ostream& ostr, const List& obj) { - ostr.write((const char*)&obj.length, sizeof(obj.length)); - ostr.write((const char*)&obj.count, sizeof(obj.count)); + ostr << obj.length << obj.count; for (int i = 0; i < obj.count; i++) ostr << obj.elements[i]; @@ -224,4 +250,5 @@ std::ostream& operator<<(std::ostream& ostr, const List& obj) { return ostr; } + #endif -- cgit v1.3.1-26-gb76a