#pragma once #include <cgv/data/ref_ptr.h> #include "named.h" #include "lib_begin.h" namespace cgv { namespace base { class CGV_API node; /// ref counted pointer to a node typedef data::ref_ptr<node,true> node_ptr; /** The node class keeps a pointer to its parent */ class CGV_API node : public named { protected: /// declare node_ptr to be a friend class friend class data::ref_ptr<node,true>; /// store a pointer to the parent node node_ptr parent; public: /// construct from name node(const std::string& name = ""); /// return the parent node node_ptr get_parent() const; /// return the root node by traversing parents until no more parent is available base_ptr get_root() const; /// set a new parent node void set_parent(node_ptr _parent); /// cast upward to node data::ref_ptr<node,true> get_node(); /// overload to return the type name of this object std::string get_type_name() const; }; template <> struct cast_helper<node> { inline static data::ref_ptr<node,true> cast(base* b) { return b->get_node(); } }; #if _MSC_VER >= 1400 CGV_TEMPLATE template class CGV_API data::ref_ptr<node>; #endif } } #include <cgv/config/lib_end.h>