From 4210a4270ee890d373752e09b9a55591e2ab68e8 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Thu, 24 Aug 2006 00:16:07 +0000 Subject: [PATCH] initial release, shared object for use among threads git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@356 0778d3d1-df1d-0410-868b-ea421aaaa00d --- include/shared_object.h | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 include/shared_object.h diff --git a/include/shared_object.h b/include/shared_object.h new file mode 100644 index 000000000..405e4f7b0 --- /dev/null +++ b/include/shared_object.h @@ -0,0 +1,82 @@ +/* + * shared_object.h - class sharedObject for use among threads + * + * Copyright (c) 2006 Javier Serrano Polo + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + + +#ifndef _SHARED_OBJECT_H +#define _SHARED_OBJECT_H + +#ifdef QT4 + +#include + +#else + +#include + +#endif + + + + +class sharedObject +{ +public: + sharedObject( void ) : + m_reference_count( 1 ) + { + } + + template + static T * ref( T * _object ) + { + _object->m_reference_mutex.lock(); + ++_object->m_reference_count; + _object->m_reference_mutex.unlock(); + return( _object ); + } + + template + static void unref( T * _object ) + { + _object->m_reference_mutex.lock(); + bool delete_object = --_object->m_reference_count == 0; + _object->m_reference_mutex.unlock(); + if ( delete_object ) + { + delete _object; + } + } + + +private: + unsigned m_reference_count; + QMutex m_reference_mutex; + +} ; + + + + +#endif +