00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef __cplusplus
00024
00025 # ifndef OGS_CORE_FEATURE_H
00026 # define OGS_CORE_FEATURE_H
00027
00028 # include <ogs/support/Attachable.h>
00029 # include <ogs/support/Object.h>
00030 # include <ogs/core/Namespace.h>
00031
00032 OGS_BEGIN_CORE_NAMESPACE
00033
00040 class Feature: public ogs::support::Object,
00041 public ogs::support::Attachable {
00042 public:
00043 virtual bool attachObject (Object& object);
00044 virtual bool detachObject ();
00045 Object* getObject () const;
00046
00047 virtual ~Feature () = 0;
00048
00049 protected:
00050 Feature ();
00051
00052 virtual bool canAttach (const Object& object) const;
00053 virtual bool canDetach () const;
00054
00055 private:
00056 Object* _object;
00057 };
00058
00062 inline Feature::Feature ():
00063 _object (NULL) {
00064
00065 }
00066
00072 inline ogs::support::Object*
00073 Feature::getObject () const {
00074 return (this->_object);
00075 }
00076
00084 inline bool
00085 Feature::canAttach (const Object& object) const {
00086 return (&object != this && _object == NULL);
00087 }
00088
00094 inline bool
00095 Feature::canDetach () const {
00096 return (true);
00097 }
00098
00099 inline Feature::~Feature () { }
00100
00101 OGS_END_CORE_NAMESPACE
00102
00103 # endif
00104
00105 #endif
00106