00001 /*MT* 00002 00003 MediaTomb - http://www.mediatomb.cc/ 00004 00005 object.cc - this file is part of MediaTomb. 00006 00007 Copyright (C) 2005 Gena Batyan <bgeradz@mediatomb.cc>, 00008 Sergey 'Jin' Bostandzhyan <jin@mediatomb.cc> 00009 00010 Copyright (C) 2006-2010 Gena Batyan <bgeradz@mediatomb.cc>, 00011 Sergey 'Jin' Bostandzhyan <jin@mediatomb.cc>, 00012 Leonhard Wimmer <leo@mediatomb.cc> 00013 00014 MediaTomb is free software; you can redistribute it and/or modify 00015 it under the terms of the GNU General Public License version 2 00016 as published by the Free Software Foundation. 00017 00018 MediaTomb is distributed in the hope that it will be useful, 00019 but WITHOUT ANY WARRANTY; without even the implied warranty of 00020 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00021 GNU General Public License for more details. 00022 00023 You should have received a copy of the GNU General Public License 00024 version 2 along with MediaTomb; if not, write to the Free Software 00025 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 00026 00027 $Id: object.cc 2081 2010-03-23 20:18:00Z lww $ 00028 */ 00029 00031 00032 #ifdef HAVE_CONFIG_H 00033 #include "autoconfig.h" 00034 #endif 00035 00036 #include <stdio.h> 00037 #include <stdlib.h> 00038 00039 #include "object.h" 00040 #include "memory.h" 00041 00042 using namespace zmm; 00043 00044 Object::Object() 00045 { 00046 atomic_set(&_ref_count, 0); 00047 #ifdef ATOMIC_NEED_MUTEX 00048 pthread_mutex_init(&mutex, NULL); 00049 #endif 00050 } 00051 Object::~Object() 00052 { 00053 #ifdef ATOMIC_NEED_MUTEX 00054 pthread_mutex_destroy(&mutex); 00055 #endif 00056 } 00057 00058 void Object::retain() 00059 { 00060 #ifdef ATOMIC_NEED_MUTEX 00061 atomic_inc(&_ref_count, &mutex); 00062 #else 00063 atomic_inc(&_ref_count); 00064 #endif 00065 } 00066 void Object::release() 00067 { 00068 #ifdef ATOMIC_NEED_MUTEX 00069 if(atomic_dec(&_ref_count, &mutex)) 00070 #else 00071 if(atomic_dec(&_ref_count)) 00072 #endif 00073 { 00074 delete this; 00075 } 00076 } 00077 00078 int Object::getRefCount() 00079 { 00080 return atomic_get(&_ref_count); 00081 } 00082 00083 void* Object::operator new (size_t size) 00084 { 00085 return MALLOC(size); 00086 } 00087 void Object::operator delete (void *ptr) 00088 { 00089 FREE(ptr); 00090 }
1.6.1