ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/dclient/include/adt/member_cmp.h
Revision: 1.1
Committed: Sun Oct 17 08:14:45 2010 UTC (13 years, 9 months ago) by sf-pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
initial import

File Contents

# User Rev Content
1 sf-pippijn 1.1 #pragma once
2    
3     template<typename C, typename T, T (C::*Member)>
4     struct class_member
5     {
6     typedef C object_type;
7     typedef T member_type;
8    
9     static member_type const &get (object_type const &v)
10     {
11     return v.*Member;
12     }
13     };
14    
15     template<typename C>
16     bool
17     member_cmp (C const &a, C const &b)
18     {
19     return false;
20     }
21    
22     template<typename Member, typename... Members>
23     bool
24     member_cmp (typename Member::object_type const &a,
25     typename Member::object_type const &b)
26     {
27     return Member::get (a) != Member::get (b)
28     ? Member::get (a) < Member::get (b)
29     : member_cmp<Members...> (a, b)
30     ;
31     }
32    
33     #define MEMBER(class, member) class_member<class, decltype (class::member), &class::member>