Ticket #5593: test.cpp

File test.cpp, 2.3 KB (added by Anil Gangolli <anil@…>, 11 years ago)

test program for ticket 5593

Line 
1
2#include <boost/interprocess/managed_mapped_file.hpp>
3#include <boost/interprocess/containers/string.hpp>
4#include <boost/interprocess/containers/vector.hpp>
5#include <boost/interprocess/allocators/allocator.hpp>
6
7#include <functional>
8#include <utility>
9#include <stddef.h>
10#include <iostream>
11
12int main()
13{
14 using namespace boost::interprocess;
15
16 const size_t mapped_segment_size = 0x1 << 20; // 1MB
17
18 const char* test_strings[] = { "a1", "b2", "c3", "d4", "e5" };
19
20 const size_t num_strings = sizeof(test_strings)/sizeof(const char*);
21
22 typedef managed_mapped_file::segment_manager segment_manager_t;
23
24 typedef allocator<char, segment_manager_t> shm_char_allocator_t;
25
26 typedef basic_string<char, std::char_traits<char>, shm_char_allocator_t> shm_string_t;
27
28 typedef allocator<shm_string_t, segment_manager_t> shm_string_allocator_t;
29
30 typedef vector<shm_string_t, shm_string_allocator_t> shm_string_vector_t;
31
32 managed_mapped_file segment(open_or_create, "TestMappedFile", mapped_segment_size);
33
34 shm_char_allocator_t shm_char_allocator(segment.get_segment_manager());
35
36 shm_string_allocator_t shm_string_allocator(segment.get_segment_manager());
37
38 shm_string_vector_t* vec = segment.find<shm_string_vector_t>("TestStringVector").first;
39 if (vec == 0) {
40 // We didn't find it; create and populate it
41 vec = segment.construct<shm_string_vector_t>("TestStringVector")(shm_string_allocator);
42 for (size_t i = 0; i < num_strings; ++i) {
43 vec->push_back(shm_string_t(test_strings[i], shm_char_allocator));
44 }
45 }
46
47 // Print out values
48 std::cout << "Shared memory allocator: " << std::endl;
49 for (shm_string_vector_t::iterator i = vec->begin(); i != vec->end(); ++i) {
50 const shm_string_t& s = *i;
51 std::cout << "String: '" << s << "' size: " << s.size() << " length: " << s.length()
52 << " c_str(): '" << s.c_str() << "'"
53 << std::endl;
54 }
55 std::cout << "Standard allocator: " << std::endl;
56 vector<string> vec2;
57 for (size_t j = 0; j < num_strings; ++j) {
58 vec2.push_back(string(test_strings[j]));
59 }
60 for (vector<string>::iterator k = vec2.begin(); k != vec2.end(); ++k) {
61 const string& s = *k;
62 std::cout << "String: '" << s << "' size: " << s.size() << " length: " << s.length()
63 << " c_str(): '" << s.c_str() << "'"
64 << std::endl;
65 }
66 return 0;
67}
68