Ticket #13533: alloc_test.cpp

File alloc_test.cpp, 2.1 KB (added by Paul Calabrese <calabrese_p@…>, 5 years ago)
Line 
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
8template <class T>
9struct 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
45int 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};