00001 /*MT* 00002 00003 MediaTomb - http://www.mediatomb.cc/ 00004 00005 object_queue.h - 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_queue.h 2081 2010-03-23 20:18:00Z lww $ 00028 */ 00029 00031 00032 #ifndef __ZMMF_OBJECT_QUEUE_H__ 00033 #define __ZMMF_OBJECT_QUEUE_H__ 00034 00035 #include "zmm/zmm.h" 00036 #include "base_queue.h" 00037 00038 namespace zmm 00039 { 00041 template <class T> 00042 class ObjectQueue : public BaseQueue<Object *> 00043 { 00044 public: 00045 ObjectQueue(int initialCapacity) : BaseQueue<Object *>(initialCapacity, NULL) 00046 { 00047 } 00048 00049 ~ObjectQueue() 00050 { 00051 Object *obj; 00052 while(NULL != (obj = BaseQueue<Object *>::dequeue())) 00053 { 00054 obj->release(); 00055 } 00056 } 00057 00058 inline void enqueue(Ref<T> element) 00059 { 00060 Object *obj = element.getPtr(); 00061 obj->retain(); 00062 BaseQueue<Object *>::enqueue(obj); 00063 } 00064 00065 inline Ref<T> dequeue() 00066 { 00067 Object *obj = BaseQueue<Object *>::dequeue(); 00068 if (obj == NULL) 00069 return nil; 00070 Ref<T> ret((T *)obj); 00071 obj->release(); 00072 return ret; 00073 } 00074 00075 inline Ref<T> get(int index) 00076 { 00077 Object *obj = BaseQueue<Object *>::get(index); 00078 if (obj == NULL) 00079 return nil; 00080 return Ref<T>((T *)obj); 00081 } 00082 }; 00083 } 00084 00085 #endif // __ZMMF_OBJECT_QUEUE_H__
1.6.1