From 09011a62c843d5756291328c2042f7cc5f59dcff Mon Sep 17 00:00:00 2001 From: Kyle K <kylek389@gmail.com> Date: Wed, 11 Apr 2012 20:58:40 -0500 Subject: initial commit --- node.h | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 node.h (limited to 'node.h') diff --git a/node.h b/node.h new file mode 100644 index 0000000..94ef4e0 --- /dev/null +++ b/node.h @@ -0,0 +1,119 @@ +/* definitions are residing in this header since that's how templates get + * expanded, we could have a separate node.cpp is compiler supports export keyword, + * instantiations of code are compiled along with the translation units that spawn them + */ + +#ifndef _MYNODE_H_ +#define _MYNODE_H_ + +#include <cstdio> + +template <class T> +class Node +{ + public: + Node(); + Node(const Node &); + Node& operator=(const Node &); + Node(T); + Node(T &); + ~Node(); + + T getVal(void) const; + void setVal(T); + void setLeft(const Node *); + void setRight(const Node *); + Node<T>& getLeft(void) const; + Node<T>& getRight(void) const; + + private: + T v; + Node *left; + Node *right; + + protected: +}; + +template <class T> +Node<T>::Node() : v(0), left(NULL), right(NULL) +{ +} + +template <class T> +Node<T>::Node(const Node& n) +{ + this->v = n.v; + this->left = n.left; + this->right = n.right; +} + +template <class T> +Node<T>& Node<T>::operator=(const Node &rhs) +{ + /* don't assign same object */ + if (this == &rhs) /* rhs is a rvalue, hence take addr of it */ + return *this; + + this->v = rhs.v; + /* these also will assign subtrees, use it wisely? */ + this->left = rhs.left; + this->right = rhs.right; + + return *this; +} + +template <class T> +Node<T>::Node(T n) : left(NULL), right(NULL) +{ + this->v = n; +} + +template <class T> +Node<T>::Node(T& n) : left(NULL), right(NULL) +{ + this->v = n; +} + +template <class T> +Node<T>::~Node() +{ +} + +template <class T> +T Node<T>::getVal(void) const +{ + return (this->v); +} + +template <class T> +void Node<T>::setVal(T v) +{ + this->v = v; +} + +template <class T> +void Node<T>::setLeft(const Node *n) +{ + this->left = const_cast<Node<T> *>(n); +} + +template <class T> +void Node<T>::setRight(const Node *n) +{ + this->right = const_cast<Node<T> *>(n); +} + +template <class T> +Node<T>& Node<T>::getLeft(void) const +{ + return *(this->left); +} + +template <class T> +Node<T>& Node<T>::getRight(void) const +{ + return *(this->right); +} + +#endif + -- cgit v1.2.3