Ticket #1063: bloop.cpp

File bloop.cpp, 1.8 KB (added by anonymous, 15 years ago)
Line 
1
2
3#include <string>
4#include <boost/multi_index_container.hpp>
5#include <boost/multi_index/hashed_index.hpp>
6#include <boost/multi_index/ordered_index.hpp>
7#include <boost/multi_index/identity.hpp>
8#include <boost/multi_index/member.hpp>
9
10using boost::multi_index_container;
11using namespace boost::multi_index;
12
13struct employee
14{
15 int id;
16 std::string name;
17 int ssnumber;
18
19 employee(int id,const std::string& name,int ssnumber):
20 id(id),name(name),ssnumber(ssnumber){}
21
22 bool operator<(const employee& e)const{return id<e.id;}
23};
24
25struct ustring_hasher {
26
27 std::size_t operator ()(std::string const& wstr) const {
28 boost::hash<std::string> hasher;
29 return hasher(wstr);
30 }
31};
32
33struct name{} ; // just for boost tags
34
35typedef multi_index_container<
36 employee,
37 indexed_by<
38 // hashed on name
39 hashed_unique<tag<name>, member<employee,std::string,&employee::name>, ustring_hasher >
40 >
41 > employee_set;
42
43typedef employee_set::index<name>::type employee_set_by_name;
44
45
46#define StrConst1 "Foobar!@##$%%^&Yavapai@QuuxQUUX@@27"
47#define StrConst2 "CabbagesAndTurnips$haveDrivenMeAway"
48
49class UT_Boost {
50public:
51 virtual void Run() { testBasic(); }
52
53protected:
54 void testBasic() {
55 employee_set testSet;
56 std::string s(StrConst1);
57 employee e1(1, s, 100);
58 testSet.insert(e1);
59
60 s = std::string(StrConst2);
61 employee e2(2, s, 101);
62 testSet.insert(e2);
63
64 employee_set_by_name& name_index = testSet.get<name>();
65
66 s = std::string(StrConst1);
67
68 employee_set::index_iterator<name>::type it = name_index.find(s);
69 BT_TEST_CONDITION(it != testSet.end());
70 BT_TEST_CONDITION(it->id == 1);
71
72 s = std::string("Hello There");
73 it = name_index.find(s);
74 BT_TEST_CONDITION(it == testSet.end());
75
76 }
77};
78