00001 /*MT* 00002 00003 MediaTomb - http://www.mediatomb.cc/ 00004 00005 storage_cache.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: storage_cache.h 2081 2010-03-23 20:18:00Z lww $ 00028 */ 00029 00031 00032 #ifndef __STORAGE_CACHE_H__ 00033 #define __STORAGE_CACHE_H__ 00034 00035 #include "zmmf/zmmf.h" 00036 #include "common.h" 00037 #include "hash.h" 00038 #include "sync.h" 00039 #include "cache_object.h" 00040 00041 #define STORAGE_CACHE_CAPACITY 29989 00042 #define STORAGE_CACHE_MAXFILL 9973 00043 00044 class StorageCache : public zmm::Object 00045 { 00046 public: 00047 StorageCache(); 00048 00049 zmm::Ref<CacheObject> getObject(int id); 00050 zmm::Ref<CacheObject> getObjectDefinitely(int id); 00051 bool removeObject(int id); 00052 void clear(); 00053 00054 zmm::Ref<zmm::Array<CacheObject> > getObjects(zmm::String location); 00055 void checkLocation(zmm::Ref<CacheObject> obj); 00056 00057 // a child was added to the specified object - update numChildren accordingly, 00058 // if the object has cached information 00059 void addChild(int id); 00060 00061 bool flushed(); 00062 00063 zmm::Ref<Mutex> getMutex() { return mutex; } 00064 00065 private: 00066 00067 int capacity; 00068 int maxfill; 00069 bool hasBeenFlushed; 00070 00071 void ensureFillLevelOk(); 00072 00073 zmm::Ref<DBOHash<int,CacheObject> > idHash; 00074 zmm::Ref<DSOHash<zmm::Array<CacheObject> > > locationHash; 00075 zmm::Ref<Mutex> mutex; 00076 }; 00077 00078 #endif // __STORAGE_CACHE_H__
1.6.1