diff options
Diffstat (limited to 'meowpp/oo/Properties.hpp')
-rw-r--r-- | meowpp/oo/Properties.hpp | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/meowpp/oo/Properties.hpp b/meowpp/oo/Properties.hpp deleted file mode 100644 index 58be1b4..0000000 --- a/meowpp/oo/Properties.hpp +++ /dev/null @@ -1,175 +0,0 @@ -#include "Properties.h" - -#include "ObjBase.h" - -#include <map> -#include <queue> - - -namespace meow{ - inline Properties::Property::Property(ObjBase* __pointer, bool __autoRemove): - _pointer(__pointer), - _counter(__autoRemove ? -1 : 1){ - } - inline Properties::Property::Property(Property const& __property): - _pointer(__property._pointer), - _counter(__property._counter){ - } - inline Properties::Property::~Property(){ - } - inline bool Properties::Property::attach(){ - if(_pointer == NULL || _counter <= 0) return false; - _counter++; - return true; - } - inline bool Properties::Property::detach(){ - if(_pointer == NULL || _counter <= 0) return false; - _counter--; - if(_counter <= 0){ - delete _pointer; - _pointer = NULL; - } - return true; - } - //////////////////////////////////////////////////////////////////// - inline size_t Properties::newIndex(std::string const& __name){ - size_t i; - if(_freeIndex.size() > 0){ - i = _freeIndex.front(); - _freeIndex.pop(); - }else{ - i = size(); - } - _index[__name] = i; - return i; - } - inline void Properties::delIndex(size_t __index){ - _properties.erase(__index); - for(std::map<std::string, size_t>::iterator it = _index.begin(); - it != _index.end(); - it++){ - if(it->second == __index){ - _index.erase(it); - break; - } - } - _freeIndex.push(__index); - } - inline void Properties::detach(size_t __index){ - _properties[__index]->detach(); - if(_properties[__index]->_counter == 0){ - delete _properties[__index]; - } - _properties[__index] = NULL; - } - inline Properties::Properties(){ - } - inline Properties::Properties(Properties const& __p){ - copy(__p); - } - inline Properties::~Properties(){ - clear(); - } - inline void Properties::clear(){ - for(std::map<size_t, Property*>::iterator it = _properties.begin(); - it != _properties.end(); - it++){ - it->second->detach(); - } - _properties.clear(); - _index .clear(); - while(!_freeIndex.empty()) - _freeIndex.pop(); - } - inline Properties& Properties::copy(Properties const& __p){ - clear(); - _properties = ((Properties&)__p)._properties; - _index = ((Properties&)__p)._index; - _freeIndex = ((Properties&)__p)._freeIndex; - for(std::map<size_t, Property*>::iterator it = _properties.begin(); - it != _properties.end(); - it++){ - it->second->attach(); - } - return *this; - } - inline size_t Properties::size() const{ - return (_properties.size()); - } - inline bool Properties::empty() const{ - return (size() == 0u); - } - inline bool Properties::chg(size_t __index, - ObjBase* __pointer, - bool __autoRemove){ - if(get(__index) == NULL) - return false; - detach(__index); - _properties[__index] = new Property(__pointer, __autoRemove); - return true; - } - inline bool Properties::add(std::string __name , - ObjBase* __pointer, - bool __autoRemove){ - if(get(__name) != NULL) - del(__name); - _properties[newIndex(__name)] = new Property(__pointer, __autoRemove); - return true; - } - inline bool Properties::del(size_t __index){ - if(get(__index) == NULL){ - return false; - } - detach(__index); - delIndex(__index); - return true; - } - inline bool Properties::del(std::string __name){ - if(get(__name) == NULL){ - return false; - } - return del(_index[__name]); - } - inline ObjBase* Properties::get(size_t __index) const{ - std::map<size_t, Property*>::const_iterator i = _properties.find(__index); - if(i == _properties.end()) return NULL; - return (ObjBase*)(i->second->_pointer); - } - inline ObjBase* Properties::get(std::string __name) const{ - std::map<std::string, size_t>::const_iterator i = _index.find(__name); - if(i == _index.end()) return NULL; - return get(i->second); - } - inline ssize_t Properties::getIndex(ObjBase* __pointer) const{ - for(std::map<size_t, Property*>::const_iterator it = _properties.begin(); - it != _properties.end(); - it++){ - if(it->second->_pointer == __pointer){ - return it->first; - } - } - return -1; - } - inline std::string Properties::getName(ObjBase* __pointer) const{ - ssize_t t = getIndex(__pointer); - if(t < 0) return std::string(); - for(std::map<std::string, size_t>::const_iterator it = _index.begin(); - it != _index.end(); - it++){ - if(it->second == (size_t)t){ - if(it == _index.end()) return std::string(); - return it->first; - } - } - return std::string(); - } - inline Properties& Properties::operator=(Properties const& __p){ - return copy(__p); - } - inline ObjBase* Properties::operator()(size_t __index) const{ - return get(__index); - } - inline ObjBase* Properties::operator()(std::string __name) const{ - return get(__name); - } -}; |