From 47ae9ddb0c11b09bd28e199de1b3ea0dd53a0644 Mon Sep 17 00:00:00 2001 From: angeld55 Date: Tue, 3 May 2022 19:53:06 +0300 Subject: changed folders --- Sem. 10/Examples/MyString/MyString.cpp | 138 ++++++++++++++++++++++++++++++ Sem. 10/Examples/MyString/MyString.h | 41 +++++++++ Sem. 10/Examples/Queue.hpp | 150 +++++++++++++++++++++++++++++++++ Sem. 10/Examples/Source.cpp | 40 +++++++++ Sem. 10/MyString/MyString.cpp | 138 ------------------------------ Sem. 10/MyString/MyString.h | 41 --------- Sem. 10/Queue.hpp | 150 --------------------------------- Sem. 10/Source.cpp | 40 --------- 8 files changed, 369 insertions(+), 369 deletions(-) create mode 100644 Sem. 10/Examples/MyString/MyString.cpp create mode 100644 Sem. 10/Examples/MyString/MyString.h create mode 100644 Sem. 10/Examples/Queue.hpp create mode 100644 Sem. 10/Examples/Source.cpp delete mode 100644 Sem. 10/MyString/MyString.cpp delete mode 100644 Sem. 10/MyString/MyString.h delete mode 100644 Sem. 10/Queue.hpp delete mode 100644 Sem. 10/Source.cpp diff --git a/Sem. 10/Examples/MyString/MyString.cpp b/Sem. 10/Examples/MyString/MyString.cpp new file mode 100644 index 0000000..77f2119 --- /dev/null +++ b/Sem. 10/Examples/MyString/MyString.cpp @@ -0,0 +1,138 @@ +#include "MyString.h" +#include +#include + +void MyString::copyFrom(const MyString& other) +{ + str = new char[strlen(other.str) + 1]; + strcpy(str, other.str); + size = other.size; +} +void MyString::free() +{ + delete[] str; +} + +MyString::MyString() +{ + str = new char[1]; + str[0] = '\0'; + size = 0; +} + +MyString::MyString(const char* data) +{ + size = strlen(data); + str = new char[size + 1]; + strcpy(str, data); +} + +MyString::MyString(const MyString& other) +{ + copyFrom(other); +} +MyString& MyString::operator=(const MyString& other) +{ + std::cout << "op=" << std::endl; + + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} +MyString::~MyString() +{ + free(); +} + + +size_t MyString::getSize() const +{ + return size; +} +void MyString::concat(const MyString& other) +{ + char* temp = new char[getSize() + other.getSize() + 1]; + strcpy(temp, str); + strcat(temp, other.str); + + delete[] str; + str = temp; + size = size + other.getSize(); +} + +const char* MyString::c_str() const +{ + return str; +} + +MyString& MyString::operator+=(const MyString& other) +{ + concat(other); + return *this; +} + +MyString operator+(const MyString& lhs, const MyString& rhs) +{ + MyString copyOfLeft(lhs); + copyOfLeft += rhs; + return copyOfLeft; +} + +std::ostream& operator<<(std::ostream& stream, const MyString& str) +{ + stream << str.str; + return stream; +} + +std::istream& operator>>(std::istream& stream, MyString& str) +{ + delete[] str.str; + char buff[1024]; + stream >> buff; + + str.size = strlen(buff); + str.str = new char[str.size + 1]; + strcpy(str.str, buff); + + return stream; +} + +bool operator==(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) == 0; +} +bool operator<=(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) <= 0; + +} +bool operator<(const MyString& lhs, const MyString& rhs) +{ + return strcmp(lhs.c_str(), rhs.c_str()) < 0; + +} + +MyString::MyString(MyString&& otherString) +{ + str = otherString.str; + size = otherString.size; + otherString.str = nullptr; + std::cout << "move constr" << std::endl; +} + +MyString& MyString::operator=(MyString&& otherString) +{ + std::cout << "move op=" << std::endl; + + if (this != &otherString) + { + free(); + str = otherString.str; + otherString.str = nullptr; + size = otherString.size; + } + return *this; +} \ No newline at end of file diff --git a/Sem. 10/Examples/MyString/MyString.h b/Sem. 10/Examples/MyString/MyString.h new file mode 100644 index 0000000..334e863 --- /dev/null +++ b/Sem. 10/Examples/MyString/MyString.h @@ -0,0 +1,41 @@ +#pragma once + +#include +class MyString +{ + char* str; + size_t size; + + void copyFrom(const MyString& other); + void free(); + +public: + MyString(); + MyString(const char*); + + MyString(const MyString&); + + MyString(MyString&&); //move constructor that accepts rvalue; + + MyString& operator=(const MyString& other); + MyString& operator=(MyString&& other); //move op= that accepts rvalue; + + ~MyString(); + + size_t getSize() const; + void concat(const MyString& other); + + const char* c_str() const; + + MyString& operator+=(const MyString& other); + + friend std::ostream& operator<<(std::ostream& stream, const MyString& str); + friend std::istream& operator>>(std::istream& stream, MyString& str); + +}; + +MyString operator+(const MyString& lhs, const MyString& rhs); + +bool operator==(const MyString& lhs, const MyString& rhs); +bool operator<=(const MyString& lhs, const MyString& rhs); +bool operator<(const MyString& lhs, const MyString& rhs); diff --git a/Sem. 10/Examples/Queue.hpp b/Sem. 10/Examples/Queue.hpp new file mode 100644 index 0000000..76e4cf2 --- /dev/null +++ b/Sem. 10/Examples/Queue.hpp @@ -0,0 +1,150 @@ +#include +#include +template +class MyQueue +{ + T* data; + size_t capacity; + size_t size; + + size_t get; + size_t put; + + void resize(); + + void copyFrom(const MyQueue& other); + void free(); +public: + MyQueue(); + + MyQueue(const MyQueue& other); + MyQueue& operator=(const MyQueue& other); + + void push(const T& obj); + void push(T&& obj); //позволява и местене + void pop(); + + const T& peek() const; + bool isEmpty() const; + + ~MyQueue(); + +}; + +template +MyQueue::MyQueue() +{ + capacity = 4; + data = new T[capacity]; + size = 0; + get = put = 0; +} + +template +void MyQueue::push(const T& obj) +{ + if (size == capacity) + resize(); + + data[put] = obj; //operator= + (++put) %= capacity; + size++; +} + +template +void MyQueue::push(T&& obj) +{ + if (size == capacity) + resize(); + + data[put] = obj; //move operator = + (++put) %= capacity; + size++; +} + +template +bool MyQueue::isEmpty() const +{ + return size == 0; +} + + +template +const T& MyQueue::peek() const +{ + if (isEmpty()) + throw std::logic_error("Empty queue!"); + + return data[get]; +} + +template +void MyQueue::pop() +{ + if (isEmpty()) + throw std::logic_error("Empty queue!"); + (++get) %= capacity; + size--; +} + +template +void MyQueue::resize() +{ + T* resizedData = new T[capacity * 2]; + for (size_t i = 0; i < size; i++) + { + resizedData[i] = data[get]; + (++get) %= capacity; + } + capacity *= 2; + delete[] data; + data = resizedData; + get = 0; + put = size; +} + + +template +void MyQueue::copyFrom(const MyQueue& other) +{ + data = new T[other.capacity]; + for (int i = 0; i < other.capacity; i++) + data[i] = other.data[i]; + + get = other.get; + put = other.put; + + size = other.size; + capacity = other.capacity; + +} + +template +void MyQueue::free() +{ + delete[] data; +} + +template +MyQueue::MyQueue(const MyQueue& other) +{ + copyFrom(other); + +} + +template +MyQueue& MyQueue::operator=(const MyQueue& other) +{ + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} + +template +MyQueue::~MyQueue() +{ + free(); +} \ No newline at end of file diff --git a/Sem. 10/Examples/Source.cpp b/Sem. 10/Examples/Source.cpp new file mode 100644 index 0000000..57d464f --- /dev/null +++ b/Sem. 10/Examples/Source.cpp @@ -0,0 +1,40 @@ +#include +#include "MyString/MyString.h" +#include "Queue.hpp" +int main() +{ + { + MyQueue q; + + q.push(3); + q.push(10); + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + + } + { + MyQueue q; + + MyString name = "Ivan"; + + q.push(std::move(name)); //so it could call push(MyString&&) + + MyString name2 = "Petur"; + q.push(name2); //push(const MyString&) + + q.push("Alex");//push(MyString&&) + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + + std::cout << q.peek() << std::endl; + q.pop(); + } +} diff --git a/Sem. 10/MyString/MyString.cpp b/Sem. 10/MyString/MyString.cpp deleted file mode 100644 index 1bceef5..0000000 --- a/Sem. 10/MyString/MyString.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "MyString.h" -#include -#include - -void MyString::copyFrom(const MyString& other) -{ - str = new char[strlen(other.str) + 1]; - strcpy(str, other.str); - size = other.size; -} -void MyString::free() -{ - delete[] str; -} - -MyString::MyString() -{ - str = new char[1]; - str[0] = '\0'; - size = 0; -} - -MyString::MyString(const char* data) -{ - size = strlen(data); - str = new char[size + 1]; - strcpy(str, data); -} - -MyString::MyString(const MyString& other) -{ - copyFrom(other); -} -MyString& MyString::operator=(const MyString& other) -{ - std::cout << "op=" << std::endl; - - if (this != &other) - { - free(); - copyFrom(other); - } - return *this; -} -MyString::~MyString() -{ - free(); -} - - -size_t MyString::getSize() const -{ - return size; -} -void MyString::concat(const MyString& other) -{ - char* temp = new char[getSize() + other.getSize() + 1]; - strcpy(temp, str); - strcat(temp, other.str); - - delete[] str; - str = temp; - size = size + other.getSize(); -} - -const char* MyString::c_str() const -{ - return str; -} - -MyString& MyString::operator+=(const MyString& other) -{ - concat(other); - return *this; -} - -MyString operator+(const MyString& lhs, const MyString& rhs) -{ - MyString copyOfLeft(lhs); - copyOfLeft += rhs; - return copyOfLeft; -} - -std::ostream& operator<<(std::ostream& stream, const MyString& str) -{ - stream << str.str; - return stream; -} - -std::istream& operator>>(std::istream& stream, MyString& str) -{ - delete[] str.str; - char buff[1024]; - stream >> buff; - - str.size = strlen(buff); - str.str = new char[str.size + 1]; - strcpy(str.str, buff); - - return stream; -} - -bool operator==(const MyString& lhs, const MyString& rhs) -{ - return strcmp(lhs.c_str(), rhs.c_str()) == 0; -} -bool operator<=(const MyString& lhs, const MyString& rhs) -{ - return strcmp(lhs.c_str(), rhs.c_str()) <= 0; - -} -bool operator<(const MyString& lhs, const MyString& rhs) -{ - return strcmp(lhs.c_str(), rhs.c_str()) < 0; - -} - -MyString::MyString(MyString&& otherString) -{ - str = otherString.str; - size = otherString.size; - otherString.str = nullptr; - std::cout << "move constr" << std::endl; -} - -MyString& MyString::operator=(MyString&& otherString) -{ - std::cout << "move op=" << std::endl; - - if (this != &otherString) - { - free(); - str = otherString.str; - otherString.str = nullptr; - size = otherString.size; - } - return *this; -} \ No newline at end of file diff --git a/Sem. 10/MyString/MyString.h b/Sem. 10/MyString/MyString.h deleted file mode 100644 index 9e54287..0000000 --- a/Sem. 10/MyString/MyString.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#include -class MyString -{ - char* str; - size_t size; - - void copyFrom(const MyString& other); - void free(); - -public: - MyString(); - MyString(const char*); - - MyString(const MyString&); - - MyString(MyString&&); //move constructor that accepts rvalue; - - MyString& operator=(const MyString& other); - MyString& operator=(MyString&& other); //move op= that accepts rvalue; - - ~MyString(); - - size_t getSize() const; - void concat(const MyString& other); - - const char* c_str() const; - - MyString& operator+=(const MyString& other); - - friend std::ostream& operator<<(std::ostream& stream, const MyString& str); - friend std::istream& operator>>(std::istream& stream, MyString& str); - -}; - -MyString operator+(const MyString& lhs, const MyString& rhs); - -bool operator==(const MyString& lhs, const MyString& rhs); -bool operator<=(const MyString& lhs, const MyString& rhs); -bool operator<(const MyString& lhs, const MyString& rhs); diff --git a/Sem. 10/Queue.hpp b/Sem. 10/Queue.hpp deleted file mode 100644 index f9321cc..0000000 --- a/Sem. 10/Queue.hpp +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include -template -class MyQueue -{ - T* data; - size_t capacity; - size_t size; - - size_t get; - size_t put; - - void resize(); - - void copyFrom(const MyQueue& other); - void free(); -public: - MyQueue(); - - MyQueue(const MyQueue& other); - MyQueue& operator=(const MyQueue& other); - - void push(const T& obj); - void push(T&& obj); //позволява и местене - void pop(); - - const T& peek() const; - bool isEmpty() const; - - ~MyQueue(); - -}; - -template -MyQueue::MyQueue() -{ - capacity = 4; - data = new T[capacity]; - size = 0; - get = put = 0; -} - -template -void MyQueue::push(const T& obj) -{ - if (size == capacity) - resize(); - - data[put] = obj; //operator= - (++put) %= capacity; - size++; -} - -template -void MyQueue::push(T&& obj) -{ - if (size == capacity) - resize(); - - data[put] = obj; //move operator = - (++put) %= capacity; - size++; -} - -template -bool MyQueue::isEmpty() const -{ - return size == 0; -} - - -template -const T& MyQueue::peek() const -{ - if (isEmpty()) - throw std::logic_error("Empty queue!"); - - return data[get]; -} - -template -void MyQueue::pop() -{ - if (isEmpty()) - throw std::logic_error("Empty queue!"); - (++get) %= capacity; - size--; -} - -template -void MyQueue::resize() -{ - T* resizedData = new T[capacity * 2]; - for (size_t i = 0; i < size; i++) - { - resizedData[i] = data[get]; - (++get) %= capacity; - } - capacity *= 2; - delete[] data; - data = resizedData; - get = 0; - put = size; -} - - -template -void MyQueue::copyFrom(const MyQueue& other) -{ - data = new T[other.capacity]; - for (int i = 0; i < other.capacity; i++) - data[i] = other.data[i]; - - get = other.get; - put = other.put; - - size = other.size; - capacity = other.capacity; - -} - -template -void MyQueue::free() -{ - delete[] data; -} - -template -MyQueue::MyQueue(const MyQueue& other) -{ - copyFrom(other); - -} - -template -MyQueue& MyQueue::operator=(const MyQueue& other) -{ - if (this != &other) - { - free(); - copyFrom(other); - } - return *this; -} - -template -MyQueue::~MyQueue() -{ - free(); -} \ No newline at end of file diff --git a/Sem. 10/Source.cpp b/Sem. 10/Source.cpp deleted file mode 100644 index d8a6036..0000000 --- a/Sem. 10/Source.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include "MyString/MyString.h" -#include "Queue.hpp" -int main() -{ - { - MyQueue q; - - q.push(3); - q.push(10); - - std::cout << q.peek() << std::endl; - q.pop(); - - std::cout << q.peek() << std::endl; - q.pop(); - - } - { - MyQueue q; - - MyString name = "Ivan"; - - q.push(std::move(name)); //so it could call push(MyString&&) - - MyString name2 = "Petur"; - q.push(name2); //push(const MyString&) - - q.push("Alex");//push(MyString&&) - - std::cout << q.peek() << std::endl; - q.pop(); - - std::cout << q.peek() << std::endl; - q.pop(); - - std::cout << q.peek() << std::endl; - q.pop(); - } -} -- cgit v1.3.1-23-gd82d