ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/traits.h
Revision: 1.1
Committed: Thu Aug 31 09:19:34 2006 UTC (17 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef TRAITS_H__
2     #define TRAITS_H__
3    
4     struct pl;
5     struct object;
6     struct mapstruct;
7     struct archt;
8     struct region;
9     struct party;
10     struct mapstruct;
11    
12     // could have used templates, but a more traditional C api
13     // uses more explicit typing which is ok for this purpose.
14     enum data_type
15     {
16     DT_END, // no further arguments
17     DT_AV, // perl-only av that needs to be flattened out
18     DT_INT,
19     DT_INT64,
20     DT_DOUBLE,
21     DT_STRING, // 0-terminated string
22     DT_DATA, // string + length
23     DT_OBJECT,
24     DT_MAP,
25     DT_PLAYER,
26     DT_ARCH,
27     DT_PARTY,
28     DT_REGION,
29    
30     NUM_DATA_TYPES
31     };
32    
33     template<typename T>
34     struct cftype { };
35    
36     template<>
37     struct cftype<int> {
38     enum { dt = DT_INT };
39     };
40    
41     template<>
42     struct cftype<sint64> {
43     enum { dt = DT_INT64 };
44     };
45    
46     template<>
47     struct cftype<double> {
48     enum { dt = DT_DOUBLE };
49     };
50    
51     template<>
52     struct cftype<const char *> {
53     enum { dt = DT_STRING };
54     };
55    
56     template<>
57     struct cftype<object> {
58     enum { dt = DT_OBJECT };
59     };
60    
61     template<>
62     struct cftype<struct pl> {
63     enum { dt = DT_PLAYER };
64     };
65    
66     template<>
67     struct cftype<mapstruct> {
68     enum { dt = DT_MAP };
69     };
70    
71     template<>
72     struct cftype<struct archt> {
73     enum { dt = DT_ARCH };
74     };
75    
76     template<>
77     struct cftype<party> {
78     enum { dt = DT_PARTY };
79     };
80    
81     template<>
82     struct cftype<region> {
83     enum { dt = DT_REGION };
84     };
85    
86     #endif
87