diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/MemoryPool.h | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/MemoryPool.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/MemoryPool.h | 230 |
1 files changed, 115 insertions, 115 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/MemoryPool.h b/contrib/libs/poco/Foundation/include/Poco/MemoryPool.h index 4af7f131f6..55f238d991 100644 --- a/contrib/libs/poco/Foundation/include/Poco/MemoryPool.h +++ b/contrib/libs/poco/Foundation/include/Poco/MemoryPool.h @@ -1,115 +1,115 @@ -// -// MemoryPool.h -// -// Library: Foundation -// Package: Core -// Module: MemoryPool -// -// Definition of the MemoryPool class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Foundation_MemoryPool_INCLUDED -#define Foundation_MemoryPool_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Mutex.h" -#include <vector> -#include <cstddef> - - -namespace Poco { - - -class Foundation_API MemoryPool - /// A simple pool for fixed-size memory blocks. - /// - /// The main purpose of this class is to speed-up - /// memory allocations, as well as to reduce memory - /// fragmentation in situations where the same blocks - /// are allocated all over again, such as in server - /// applications. - /// - /// All allocated blocks are retained for future use. - /// A limit on the number of blocks can be specified. - /// Blocks can be preallocated. -{ -public: - MemoryPool(std::size_t blockSize, int preAlloc = 0, int maxAlloc = 0); - /// Creates a MemoryPool for blocks with the given blockSize. - /// The number of blocks given in preAlloc are preallocated. - - ~MemoryPool(); - - void* get(); - /// Returns a memory block. If there are no more blocks - /// in the pool, a new block will be allocated. - /// - /// If maxAlloc blocks are already allocated, an - /// OutOfMemoryException is thrown. - - void release(void* ptr); - /// Releases a memory block and returns it to the pool. - - std::size_t blockSize() const; - /// Returns the block size. - - int allocated() const; - /// Returns the number of allocated blocks. - - int available() const; - /// Returns the number of available blocks in the pool. - -private: - MemoryPool(); - MemoryPool(const MemoryPool&); - MemoryPool& operator = (const MemoryPool&); - - void clear(); - - enum - { - BLOCK_RESERVE = 128 - }; - - typedef std::vector<char*> BlockVec; - - std::size_t _blockSize; - int _maxAlloc; - int _allocated; - BlockVec _blocks; - FastMutex _mutex; -}; - - -// -// inlines -// -inline std::size_t MemoryPool::blockSize() const -{ - return _blockSize; -} - - -inline int MemoryPool::allocated() const -{ - return _allocated; -} - - -inline int MemoryPool::available() const -{ - return (int) _blocks.size(); -} - - -} // namespace Poco - - -#endif // Foundation_MemoryPool_INCLUDED +// +// MemoryPool.h +// +// Library: Foundation +// Package: Core +// Module: MemoryPool +// +// Definition of the MemoryPool class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_MemoryPool_INCLUDED +#define Foundation_MemoryPool_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Mutex.h" +#include <vector> +#include <cstddef> + + +namespace Poco { + + +class Foundation_API MemoryPool + /// A simple pool for fixed-size memory blocks. + /// + /// The main purpose of this class is to speed-up + /// memory allocations, as well as to reduce memory + /// fragmentation in situations where the same blocks + /// are allocated all over again, such as in server + /// applications. + /// + /// All allocated blocks are retained for future use. + /// A limit on the number of blocks can be specified. + /// Blocks can be preallocated. +{ +public: + MemoryPool(std::size_t blockSize, int preAlloc = 0, int maxAlloc = 0); + /// Creates a MemoryPool for blocks with the given blockSize. + /// The number of blocks given in preAlloc are preallocated. + + ~MemoryPool(); + + void* get(); + /// Returns a memory block. If there are no more blocks + /// in the pool, a new block will be allocated. + /// + /// If maxAlloc blocks are already allocated, an + /// OutOfMemoryException is thrown. + + void release(void* ptr); + /// Releases a memory block and returns it to the pool. + + std::size_t blockSize() const; + /// Returns the block size. + + int allocated() const; + /// Returns the number of allocated blocks. + + int available() const; + /// Returns the number of available blocks in the pool. + +private: + MemoryPool(); + MemoryPool(const MemoryPool&); + MemoryPool& operator = (const MemoryPool&); + + void clear(); + + enum + { + BLOCK_RESERVE = 128 + }; + + typedef std::vector<char*> BlockVec; + + std::size_t _blockSize; + int _maxAlloc; + int _allocated; + BlockVec _blocks; + FastMutex _mutex; +}; + + +// +// inlines +// +inline std::size_t MemoryPool::blockSize() const +{ + return _blockSize; +} + + +inline int MemoryPool::allocated() const +{ + return _allocated; +} + + +inline int MemoryPool::available() const +{ + return (int) _blocks.size(); +} + + +} // namespace Poco + + +#endif // Foundation_MemoryPool_INCLUDED |