diff options
Diffstat (limited to 'Swiften/Base/SafeAllocator.h')
| -rw-r--r-- | Swiften/Base/SafeAllocator.h | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/Swiften/Base/SafeAllocator.h b/Swiften/Base/SafeAllocator.h new file mode 100644 index 0000000..9f9dd42 --- /dev/null +++ b/Swiften/Base/SafeAllocator.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include <vector> +#include <algorithm> + +namespace Swift { +	template<typename T> +	class SafeAllocator : public std::allocator<T> { +		public: +			template <class U> struct rebind { +				typedef SafeAllocator<U> other; +			}; + +			SafeAllocator() throw() {} +			SafeAllocator(const SafeAllocator&) throw() : std::allocator<T>() {} +			template <class U> SafeAllocator(const SafeAllocator<U>&) throw() {} +			~SafeAllocator() throw() {} + +			void deallocate (T* p, size_t num) { +				std::fill(reinterpret_cast<char*>(p), reinterpret_cast<char*>(p + num), 0); +				std::allocator<T>::deallocate(p, num); +			} +	}; +}; | 
 Swift
 Swift