#ifndef __FLATCOLLECTOR_H__ #define __FLATCOLLECTOR_H__ #include "object.hpp" #include namespace flat { class FlatCollector : virtual public flat::object { FlatCollector * parent; bool released; std::set children; public: FlatCollector(FlatCollector *parent = 0); virtual ~FlatCollector(); /* Ownership functions */ bool isReleased() const; /* Release object from automatic ownership destruction */ void release(); void attach(FlatCollector*); void detach(FlatCollector*); void setParent(FlatCollector*); void releaseParent(); FlatCollector * getParent(); bool isParentOf(FlatCollector*) const; std::set::iterator begin(); std::set::iterator end(); std::set::const_iterator begin() const; std::set::const_iterator end() const; }; } #endif