00001 // 00002 // See license.txt for license information. 00003 // 00004 // outerable_object.hpp 00005 // 00006 // 17-Jul-2003 phamilton Created 00007 // 00008 00009 #ifndef incCOMMON_OUTERABLE_OBJECT 00010 #define incCOMMON_OUTERABLE_OBJECT 00011 00012 namespace ph { 00013 namespace common { 00014 00015 // forwards 00016 class object_base; 00017 00018 class outerable_object_base 00019 /** 00020 Abstract class representing a an object which has an outer. 00021 */ 00022 { 00023 public: 00024 virtual ~outerable_object_base() {} 00025 00026 virtual object_base *outer() const = 0; 00027 //!< return the "outer" object from this one. 00028 //! 00029 virtual void outer(object_base *outer) = 0; 00030 //!< Set the outer object of this object. 00031 //! 00032 }; 00033 00034 class outerable_helper 00035 /** 00036 A helper class whcih declares a member of the class type to provide the 00037 outer of an object. 00038 */ 00039 { 00040 public: 00041 outerable_helper(object_base *outer=0) : 00042 _outer(outer) 00043 {}; 00044 00045 object_base *outer_helper() const 00046 { return _outer; } 00047 void outer_helper(object_base *outer) 00048 { _outer = outer; } 00049 00050 private: 00051 object_base *_outer; 00052 }; 00053 00054 }; // common 00055 }; // ph 00056 00057 #endif // incCOMMON_OUTERABLE_OBJECT