From 41ff431bddf98f71cceec6bce9f3a2791768d0e4 Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Fri, 1 Jan 2021 19:00:03 +0100 Subject: [PATCH] added multiset --- Assignment_2/MultiSet.cpp | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Assignment_2/MultiSet.cpp diff --git a/Assignment_2/MultiSet.cpp b/Assignment_2/MultiSet.cpp new file mode 100644 index 0000000..2fe537f --- /dev/null +++ b/Assignment_2/MultiSet.cpp @@ -0,0 +1,84 @@ +#pragma once + +#include + +#include"Node.cpp" +#include"Set.cpp" + +class MultiSet:public Set { + Node* first; + public: + MultiSet(); + bool add(int element); + bool rmv(int element); + bool ctn(int element); +}; + +MultiSet::MultiSet() : Set("MultiSet") { } + +bool MultiSet::add(int element) { + this->first->lock(); + Node* p = this->first; + Node* c = p->next; + c->lock(); + while (c->is_smaller_than(element)) { + p->unlock(); + p = c; + c = c->next; + c->lock(); + } + Node* n = new Node(element); + n->next = c; + p->next = n; + + c->unlock(); + p->unlock(); + return true; +} + +bool MultiSet::rmv(int element) { + this->first->lock(); + Node* p = this->first; + Node* c = p->next; + c->lock(); + + while (c->is_smaller_than(element)) { + p->unlock(); + c = c->next; + c->lock(); + } + + if (c->is_equal(element)) { + p->next = c->next; + + c->unlock(); + p->unlock(); + return true; + } else { + c->unlock(); + p->unlock(); + return false; + } +} +bool MultiSet::ctn(int element) { + this->first->lock(); + Node* p = this->first; + Node* c = p->next; + c->lock(); + + while (c->is_smaller_than(element)) { + p->unlock(); + c = c->next; + c->lock(); + } + + if (c->is_equal(element)) { + c->unlock(); + p->unlock(); + return true; + } else { + c->unlock(); + p->unlock(); + return false; + } +} \ No newline at end of file