1 | #include <limits>
|
---|
2 | #include <vector>
|
---|
3 | #include <iostream>
|
---|
4 | #include <cstddef>
|
---|
5 | #include <boost/container/vector.hpp>
|
---|
6 | #include <boost/container/detail/allocation_type.hpp>
|
---|
7 |
|
---|
8 | template <class T>
|
---|
9 | struct allocator {
|
---|
10 | typedef size_t size_type;
|
---|
11 | typedef ptrdiff_t difference_type;
|
---|
12 | typedef T* pointer;
|
---|
13 | typedef const T* const_pointer;
|
---|
14 | typedef T& reference;
|
---|
15 | typedef const T& const_reference;
|
---|
16 | typedef T value_type;
|
---|
17 | typedef allocator<T> self_t;
|
---|
18 | typedef boost::container::container_detail::version_type<self_t, 2> version;
|
---|
19 |
|
---|
20 | void deallocate(pointer p, size_type) {
|
---|
21 | std::cout << "deallocate()" << std::endl;
|
---|
22 | }
|
---|
23 |
|
---|
24 |
|
---|
25 | pointer allocation_command(boost::container::allocation_type command,
|
---|
26 | size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse)
|
---|
27 | {
|
---|
28 | std::cout << "allocation_command(): command=" << command << ", limit_size=" << limit_size
|
---|
29 | << ", prefer_in_recvd_out_size=" << prefer_in_recvd_out_size << ", reuse=" << (void*) reuse << std::endl;
|
---|
30 |
|
---|
31 | static char buff[200];
|
---|
32 | if (limit_size == 100) {
|
---|
33 | prefer_in_recvd_out_size = 100;
|
---|
34 | reuse = 0;
|
---|
35 | return &buff[50];
|
---|
36 | } else if (limit_size == 200) {
|
---|
37 | prefer_in_recvd_out_size = 200;
|
---|
38 | return buff;
|
---|
39 | } else {
|
---|
40 | BOOST_ASSERT(false);
|
---|
41 | }
|
---|
42 | }
|
---|
43 | };
|
---|
44 |
|
---|
45 | int main(int argc, char *argv[])
|
---|
46 | {
|
---|
47 | boost::container::vector<char, allocator<char>> myvector;
|
---|
48 | std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl;
|
---|
49 | myvector.resize(100);
|
---|
50 | myvector[0] = 'x';
|
---|
51 | myvector[49] = 'z';
|
---|
52 | std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl;
|
---|
53 | std::cout << "myvector[0]='" << myvector[0] << "' myvector[49]='" << myvector[49] << "'" << std::endl;
|
---|
54 | myvector.resize(200);
|
---|
55 | std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl;
|
---|
56 | std::cout << "myvector[0]='" << myvector[0] << "' myvector[49]='" << myvector[49] << "'" << std::endl;
|
---|
57 | return 0;
|
---|
58 | };
|
---|