/*
* File: main.cpp
* Author: Daniel Gilbert
* Purpose: Test attach() and detach() functionality
* Created on May 23, 2017, 6:37 PM
*/
#include <iostream>
#include <memory>
#include <string>
#include <utility>
using namespace std;
template <class T>
class Node
{
public:
T data;
unique_ptr<Node<T>> left = nullptr;
unique_ptr<Node<T>> right = nullptr;
Node<T>* parent = nullptr;
Node(T dataP) : data(dataP) {}
};
template <class T>
void attach(unique_ptr<Node<T>>& parent, string leftOrRight,
unique_ptr<Node<T>> child)
{
child->parent = parent.get();
// if (leftOrRight == "right")
// parent->right = move(child);
// else
// parent->left = move(child);
}
template <class T>
unique_ptr<Node<T>> detach(unique_ptr<Node<T>>& node)
{
node->parent = nullptr;
return move(node);
}
int main()
{
auto root = make_unique<Node<int>>(1);
attach(root, "right", make_unique<Node<int>>(2));
if (left) cout << "not empty!" << endl;
cout << left << endl;
// cout << root->right->data << endl;
// if (root.get() == root->right->parent) cout << "true!" << endl;
// auto left = detach(root->right);
// attach(root, "left", left);
// cout << root->left->data << endl;
// if (root.get() == root->left->parent) cout << "true!" << endl;
// if (!left) cout << "empty" << endl;
return 0;
}
LyogCiAqIEZpbGU6ICAgbWFpbi5jcHAKICogQXV0aG9yOiBEYW5pZWwgR2lsYmVydAogKiBQdXJwb3NlOiBUZXN0IGF0dGFjaCgpIGFuZCBkZXRhY2goKSBmdW5jdGlvbmFsaXR5CiAqIENyZWF0ZWQgb24gTWF5IDIzLCAyMDE3LCA2OjM3IFBNCiAqLwoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgTm9kZQp7CiAgICBwdWJsaWM6CiAgICAgICAgVCBkYXRhOwogICAgICAgIHVuaXF1ZV9wdHI8Tm9kZTxUPj4gbGVmdCA9IG51bGxwdHI7CiAgICAgICAgdW5pcXVlX3B0cjxOb2RlPFQ+PiByaWdodCA9IG51bGxwdHI7CiAgICAgICAgTm9kZTxUPiogcGFyZW50ID0gbnVsbHB0cjsKICAgICAgICBOb2RlKFQgZGF0YVApIDogZGF0YShkYXRhUCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIGF0dGFjaCh1bmlxdWVfcHRyPE5vZGU8VD4+JiBwYXJlbnQsIHN0cmluZyBsZWZ0T3JSaWdodCwKICAgICAgICAgICAgdW5pcXVlX3B0cjxOb2RlPFQ+PiBjaGlsZCkKewogICAgY2hpbGQtPnBhcmVudCA9IHBhcmVudC5nZXQoKTsKLy8gICAgaWYgKGxlZnRPclJpZ2h0ID09ICJyaWdodCIpCi8vICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gbW92ZShjaGlsZCk7Ci8vICAgIGVsc2UKLy8gICAgICAgIHBhcmVudC0+bGVmdCA9IG1vdmUoY2hpbGQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KdW5pcXVlX3B0cjxOb2RlPFQ+PiBkZXRhY2godW5pcXVlX3B0cjxOb2RlPFQ+PiYgbm9kZSkKewogICAgbm9kZS0+cGFyZW50ID0gbnVsbHB0cjsKICAgIHJldHVybiBtb3ZlKG5vZGUpOwp9CgppbnQgbWFpbigpCnsKICAgIGF1dG8gcm9vdCA9IG1ha2VfdW5pcXVlPE5vZGU8aW50Pj4oMSk7CiAgICBhdHRhY2gocm9vdCwgInJpZ2h0IiwgbWFrZV91bmlxdWU8Tm9kZTxpbnQ+PigyKSk7CiAgICBpZiAobGVmdCkgY291dCA8PCAibm90IGVtcHR5ISIgPDwgZW5kbDsKICAgIGNvdXQgPDwgbGVmdCA8PCBlbmRsOwovLyAgICBjb3V0IDw8IHJvb3QtPnJpZ2h0LT5kYXRhIDw8IGVuZGw7Ci8vICAgIGlmIChyb290LmdldCgpID09IHJvb3QtPnJpZ2h0LT5wYXJlbnQpIGNvdXQgPDwgInRydWUhIiA8PCBlbmRsOwovLyAgICBhdXRvIGxlZnQgPSBkZXRhY2gocm9vdC0+cmlnaHQpOwovLyAgICBhdHRhY2gocm9vdCwgImxlZnQiLCBsZWZ0KTsKLy8gICAgY291dCA8PCByb290LT5sZWZ0LT5kYXRhIDw8IGVuZGw7Ci8vICAgIGlmIChyb290LmdldCgpID09IHJvb3QtPmxlZnQtPnBhcmVudCkgY291dCA8PCAidHJ1ZSEiIDw8IGVuZGw7Ci8vICAgIGlmICghbGVmdCkgY291dCA8PCAiZW1wdHkiIDw8IGVuZGw7CiAgICAKICAgIHJldHVybiAwOwp9