Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::shared_ptr<Node> RemoveNode(std::shared_ptr<Node> remNode) {
- auto remlock = std::unique_lock<std::mutex>(remNode->mutex);
- remNode->data->ShowName();
- // The one behind me should link to my next value, we're editing it so lock
- if (remNode->prev) {
- auto prevlock = std::unique_lock<std::mutex>(remNode->prev->mutex);
- remNode->prev->next = remNode->next;
- }
- else { // Handle head behaviour if front of list. Only changing a ptr, lock not needed
- if (head == remNode) {
- if (remNode->next) {
- head = remNode->next;
- }
- else {
- head = nullptr;
- }
- }
- }
- // My next value should link to the value behind me
- if (remNode->next) {
- auto nextlock = std::unique_lock<std::mutex>(remNode->next->mutex);
- remNode->next->prev = remNode->prev;
- }
- else { // Handle tail behaviour if end of list
- if (tail == remNode) {
- if (remNode->prev) {
- tail = remNode->prev;
- }
- else {
- tail = nullptr;
- }
- }
- }
- // Store next step;
- std::shared_ptr<Node> tmp = remNode->next;
- // Clear up my values;
- remNode->next = nullptr;
- remNode->prev = nullptr;
- remNode->data = nullptr;
- // No one should reference me,
- // and I don't reference anyone now
- // so replace to finish cleanup
- return tmp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement