modify locate to not use tuples instead use pointers

This commit is contained in:
2020-12-31 18:13:39 +01:00
parent 8fd238342f
commit 737d605ca1

View File

@@ -8,7 +8,7 @@
class LazySet:public Set { class LazySet:public Set {
protected: protected:
Node* first; Node* first;
std::tuple<Node*, Node*> locate(int element); void locate(int element, Node* prev, Node* cur);
public: public:
LazySet(); LazySet();
@@ -20,9 +20,9 @@ class LazySet:public Set {
LazySet::LazySet() : Set() { } LazySet::LazySet() : Set() { }
bool LazySet::add(int element) { bool LazySet::add(int element) {
auto tuple = locate(element); Node* p;
Node* p = std::get<0>(tuple); Node* c;
Node* c = std::get<1>(tuple); locate(element, p, c);
if (c->is_equal(element)) { if (c->is_equal(element)) {
p->unlock(); p->unlock();
@@ -38,9 +38,9 @@ bool LazySet::add(int element) {
} }
} }
bool LazySet::rmv(int element) { bool LazySet::rmv(int element) {
auto tuple = locate(element); Node* p;
Node* p = std::get<0>(tuple); Node* c;
Node* c = std::get<1>(tuple); locate(element, p, c);
if (c->is_equal(element)) { if (c->is_equal(element)) {
c->deleted = true; c->deleted = true;
@@ -68,7 +68,10 @@ bool LazySet::ctn(int element) {
} }
std::tuple<Node*, Node*> LazySet::locate(int element) { void LazySet::locate(int element, Node* prev, Node* cur) {
prev = Node::Dummy();
cur = Node::Dummy();
Node* p = first; Node* p = first;
Node* c = p->next; Node* c = p->next;
@@ -79,12 +82,10 @@ std::tuple<Node*, Node*> LazySet::locate(int element) {
p->lock(); p->lock();
c->lock(); c->lock();
if (!p->deleted && !c->deleted && p->next == c) { if (!p->deleted && !c->deleted && p->next == c) {
p->unlock(); prev = p;
c->unlock(); cur = c;
return {p, c};
} }
p->unlock(); p->unlock();
c->unlock(); c->unlock();
return {Node::Dummy(), Node::Dummy()};
} }