/* Used in Boost.MultiIndex tests. * * Copyright 2003-2018 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */ #ifndef BOOST_MULTI_INDEX_TEST_EMPLOYEE_HPP #define BOOST_MULTI_INDEX_TEST_EMPLOYEE_HPP #include /* keep it first to prevent nasty warns in MSVC */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "non_std_allocator.hpp" struct employee { int id; std::string name; int age; int ssn; employee(int id_,std::string name_,int age_,int ssn_): id(id_),name(name_),age(age_),ssn(ssn_) {} employee(const employee& x): id(x.id),name(x.name),age(x.age),ssn(x.ssn) {} employee(BOOST_RV_REF(employee) x): id(x.id),name(boost::move(x.name)),age(x.age),ssn(x.ssn) {} employee& operator=(BOOST_COPY_ASSIGN_REF(employee) x) { id=x.id; name=x.name; age=x.age; ssn=x.ssn; return *this; }; employee& operator=(BOOST_RV_REF(employee) x) { id=x.id; name=boost::move(x.name); age=x.age; ssn=x.ssn; return *this; } bool operator==(const employee& x)const { return id==x.id&&name==x.name&&age==x.age; } bool operator<(const employee& x)const { return id (const employee& x)const{return x<*this;} bool operator>=(const employee& x)const{return !(*this >, boost::multi_index::hashed_non_unique< boost::multi_index::tag, BOOST_MULTI_INDEX_MEMBER(employee,std::string,name)>, boost::multi_index::ranked_non_unique< boost::multi_index::tag, BOOST_MULTI_INDEX_MEMBER(employee,int,age)>, boost::multi_index::sequenced< boost::multi_index::tag >, boost::multi_index::hashed_unique< boost::multi_index::tag, BOOST_MULTI_INDEX_MEMBER(employee,int,ssn)>, boost::multi_index::random_access< boost::multi_index::tag > > {}; typedef boost::multi_index::multi_index_container< employee, employee_set_indices, non_std_allocator > employee_set; #if defined(BOOST_NO_MEMBER_TEMPLATES) typedef boost::multi_index::nth_index< employee_set,1>::type employee_set_by_name; #else typedef employee_set::nth_index<1>::type employee_set_by_name; #endif typedef boost::multi_index::index< employee_set,age>::type employee_set_by_age; typedef boost::multi_index::index< employee_set,as_inserted>::type employee_set_as_inserted; typedef boost::multi_index::index< employee_set,ssn>::type employee_set_by_ssn; #if defined(BOOST_NO_MEMBER_TEMPLATES) typedef boost::multi_index::index< employee_set,randomly>::type employee_set_randomly; #else typedef employee_set::index< randomly>::type employee_set_randomly; #endif #endif