]> Git Repo - VerusCoin.git/blob - src/support/allocators/zeroafterfree.h
Catch mined PoS lookalike blocks
[VerusCoin.git] / src / support / allocators / zeroafterfree.h
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 #ifndef BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
7 #define BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
8
9 #include "support/cleanse.h"
10
11 #include <memory>
12 #include <vector>
13
14 template <typename T>
15 struct zero_after_free_allocator : public std::allocator<T> {
16     // MSVC8 default copy constructor is broken
17     typedef std::allocator<T> base;
18     typedef typename base::size_type size_type;
19     typedef typename base::difference_type difference_type;
20     typedef typename base::pointer pointer;
21     typedef typename base::const_pointer const_pointer;
22     typedef typename base::reference reference;
23     typedef typename base::const_reference const_reference;
24     typedef typename base::value_type value_type;
25     zero_after_free_allocator() throw() {}
26     zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) {}
27     template <typename U>
28     zero_after_free_allocator(const zero_after_free_allocator<U>& a) throw() : base(a)
29     {
30     }
31     ~zero_after_free_allocator() throw() {}
32     template <typename _Other>
33     struct rebind {
34         typedef zero_after_free_allocator<_Other> other;
35     };
36
37     void deallocate(T* p, std::size_t n)
38     {
39         if (p != NULL)
40             memory_cleanse(p, sizeof(T) * n);
41         std::allocator<T>::deallocate(p, n);
42     }
43 };
44
45 // Byte-vector that clears its contents before deletion.
46 typedef std::vector<char, zero_after_free_allocator<char> > CSerializeData;
47
48 #endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
This page took 0.025086 seconds and 4 git commands to generate.