core/vgui/vgui_tableau_sptr.h
Go to the documentation of this file.
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_