fork download
  1. /*
  2.  * File: main.cpp
  3.  * Author: Daniel Gilbert
  4.  * Purpose: Test attach() and detach() functionality
  5.  * Created on May 23, 2017, 6:37 PM
  6.  */
  7.  
  8. #include <iostream>
  9. #include <memory>
  10. #include <string>
  11. #include <utility>
  12.  
  13. using namespace std;
  14.  
  15. template <class T>
  16. class Node
  17. {
  18. public:
  19. T data;
  20. unique_ptr<Node<T>> left = nullptr;
  21. unique_ptr<Node<T>> right = nullptr;
  22. Node<T>* parent = nullptr;
  23. Node(T dataP) : data(dataP) {}
  24. };
  25.  
  26. template <class T>
  27. void attach(unique_ptr<Node<T>>& parent, string leftOrRight,
  28. unique_ptr<Node<T>> child)
  29. {
  30. child->parent = parent.get();
  31. // if (leftOrRight == "right")
  32. // parent->right = move(child);
  33. // else
  34. // parent->left = move(child);
  35. }
  36.  
  37. template <class T>
  38. unique_ptr<Node<T>> detach(unique_ptr<Node<T>>& node)
  39. {
  40. node->parent = nullptr;
  41. return move(node);
  42. }
  43.  
  44. int main()
  45. {
  46. auto root = make_unique<Node<int>>(1);
  47. attach(root, "right", make_unique<Node<int>>(2));
  48. if (left) cout << "not empty!" << endl;
  49. cout << left << endl;
  50. // cout << root->right->data << endl;
  51. // if (root.get() == root->right->parent) cout << "true!" << endl;
  52. // auto left = detach(root->right);
  53. // attach(root, "left", left);
  54. // cout << root->left->data << endl;
  55. // if (root.get() == root->left->parent) cout << "true!" << endl;
  56. // if (!left) cout << "empty" << endl;
  57.  
  58. return 0;
  59. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
not empty!