| 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 | };
|
|---|