aboutsummaryrefslogtreecommitdiff
path: root/week12/Exercise1/TextDocument.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'week12/Exercise1/TextDocument.cpp')
-rw-r--r--week12/Exercise1/TextDocument.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/week12/Exercise1/TextDocument.cpp b/week12/Exercise1/TextDocument.cpp
new file mode 100644
index 0000000..f5abf2c
--- /dev/null
+++ b/week12/Exercise1/TextDocument.cpp
@@ -0,0 +1,53 @@
+#include "TextDocument.h"
+#include <cstring>
+
+void TextDocument::free() {
+ delete[] text;
+}
+
+void TextDocument::copyFrom(const TextDocument& other) {
+ this->len = other.len;
+ this->text = new char[len + 1];
+ strcpy(this->text, other.text);
+}
+
+TextDocument::TextDocument() {
+ this->text = nullptr;
+}
+
+TextDocument::~TextDocument() {
+ free();
+}
+
+TextDocument::TextDocument(const TextDocument& other) {
+ copyFrom(other);
+}
+
+TextDocument& TextDocument::operator=(const TextDocument& other) {
+ if (this != &other) {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+
+TextDocument::TextDocument(TextDocument&& other) {
+ this->len = other.len;
+ this->text = other.text;
+ other.text = nullptr;
+}
+
+TextDocument& TextDocument::operator=(TextDocument&& other) {
+ if (this != &other) {
+ free();
+
+ this->len = other.len;
+ this->text = other.text;
+ other.text = nullptr;
+ }
+ return *this;
+}
+
+std::ostream& operator<<(std::ostream& ostr, const TextDocument& other) {
+ return ostr << other.text;
+}