00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_HANDLEABLE_HPP
00030 #define TEUCHOS_HANDLEABLE_HPP
00031
00032 #include "Teuchos_ConfigDefs.hpp"
00033 #include "Teuchos_RefCountPtr.hpp"
00034
00035
00036 namespace Teuchos
00037 {
00052 template <typename Base>
00053 class ConstHandleable
00054 {
00055 public:
00057 virtual ~ConstHandleable(){}
00058
00061 virtual RefCountPtr<const Base> getConstRcp() const = 0 ;
00062 };
00063
00078 template <typename Base>
00079 class Handleable : public virtual ConstHandleable<Base>
00080 {
00081 public:
00082
00084 virtual ~Handleable(){;}
00085
00087 virtual RefCountPtr<Base> getRcp() = 0 ;
00088
00089 };
00090 }
00091
00092
00106 #define TEUCHOS_GET_RCP(Base) \
00107 virtual Teuchos::RefCountPtr<const Base > getConstRcp() const {return rcp(this);} \
00108 virtual Teuchos::RefCountPtr<Base > getRcp() {return rcp(this);}
00109
00121 #define TEUCHOS_GET_CONST_RCP(Base) \
00122 virtual Teuchos::RefCountPtr<const Base > getConstRcp() const {return rcp(this);}
00123
00124
00125
00126
00127 #endif // TEUCHOS_HANDLEABLE_HPP