00001 // This is core/vgui/vgui_tableau_sptr.h 00002 #ifndef vgui_tableau_sptr_h_ 00003 #define vgui_tableau_sptr_h_ 00004 //: 00005 // \file 00006 // \brief Smart-pointer to a vgui_tableau 00007 00008 class vgui_tableau; 00009 #include <vbl/vbl_smart_ptr.h> 00010 00011 struct vgui_tableau_sptr : public vbl_smart_ptr<vgui_tableau> { 00012 typedef vbl_smart_ptr<vgui_tableau> base; 00013 00014 vgui_tableau_sptr() {} 00015 vgui_tableau_sptr(vgui_tableau* p): base(p) {} 00016 void vertical_cast(vgui_tableau_sptr const& that) { *this = that; } 00017 void vertical_cast(vgui_tableau* t) { *this = t; } 00018 }; 00019 00020 // Stop doxygen documenting the B class 00021 #ifndef DOXYGEN_SHOULD_SKIP_THIS 00022 template <class T, class B = vgui_tableau_sptr> 00023 struct vgui_tableau_sptr_t : public B { 00024 vgui_tableau_sptr_t(): B() {} 00025 vgui_tableau_sptr_t(T* p): B(p) {} 00026 vgui_tableau_sptr_t(vgui_tableau_sptr_t<T> const& r): B(r) {} 00027 vgui_tableau_sptr_t<T>& operator=(vgui_tableau_sptr_t<T> const& r) { B::operator=(r); return *this; } 00028 T* operator->() const { return (T*)this->as_pointer(); } 00029 T& operator*() const { return *((T*)this->as_pointer()); } 00030 }; 00031 #endif // DOXYGEN_SHOULD_SKIP_THIS 00032 00033 #endif // vgui_tableau_sptr_h_