diff --git a/headers/os/support/BlockCache.h b/headers/os/support/BlockCache.h index 5ea28ef0cf..ce4f56d3e1 100644 --- a/headers/os/support/BlockCache.h +++ b/headers/os/support/BlockCache.h @@ -1,56 +1,77 @@ -//****************************************************************************** -// -// File: BlockCache.h -// -// Description: Manages a cache of same size blocks of memory -// -// Copyright (c) 2002 Massimiliano Origgi -// -// License: -// -//****************************************************************************** - +/* + * Copyright (c) 2003 Marcus Overhagen + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ #ifndef _BLOCK_CACHE_H #define _BLOCK_CACHE_H #include #include -// Allocation type -enum -{ +/* The OpenBeOS implementation of the BBLockCache. + * A class used to manage a pool of memory blocks. + */ + +/* The allocation type to be used in the constructor + */ +enum { B_OBJECT_CACHE = 0, B_MALLOC_CACHE = 1 }; - +/* The BBlockCache class: + */ class BBlockCache { public: + BBlockCache(size_t cacheSize, + size_t blockSize, + uint32 allocationType); + virtual ~BBlockCache(); - BBlockCache(size_t CacheSize, size_t BlockSize, uint32 Type); -virtual ~BBlockCache(void); - - void *Get(size_t BlockSize); - void Save(void *Data, size_t BlockSize); + void * Get(size_t blockSize); + void Save(void *pointer, size_t blockSize); +/* Private or reserved functions and data + */ private: + virtual void _ReservedBlockCache1(); + virtual void _ReservedBlockCache2(); -virtual void _ReservedBlockCache1(); -virtual void _ReservedBlockCache2(); + BBlockCache(const BBlockCache &); + BBlockCache &operator=(const BBlockCache &); - BBlockCache(const BBlockCache &); - BBlockCache &operator=(const BBlockCache &); + struct _FreeBlock + { + uint32 magic1; + _FreeBlock *next; + uint32 magic2; + }; - size_t fCacheSize; - size_t fBlockSize; - void *fCache; - size_t fMark; - BLocker fLock; - void *(*fAlloc)(size_t Size); - void (*fFree)(void *Data); - - uint32 _reserved[2]; + _FreeBlock *fFreeList; + size_t fBlockSize; + int32 fExcessBlocks; + BLocker fLocker; + void * (*fAlloc)(size_t size); + void (*fFree)(void *pointer); + uint32 _reserved[3]; }; -#endif +#endif /* _BLOCK_CACHE_H */