… | |
… | |
22 | * The authors can be reached via e-mail at crossfire@schmorp.de |
22 | * The authors can be reached via e-mail at crossfire@schmorp.de |
23 | */ |
23 | */ |
24 | |
24 | |
25 | #ifndef LIVING_H |
25 | #ifndef LIVING_H |
26 | #define LIVING_H |
26 | #define LIVING_H |
|
|
27 | |
|
|
28 | #include <cassert> |
27 | |
29 | |
28 | // corresponds to some arrays in common/living.C |
30 | // corresponds to some arrays in common/living.C |
29 | enum { |
31 | enum { |
30 | STR, |
32 | STR, |
31 | DEX, |
33 | DEX, |
… | |
… | |
81 | sint16 ACC (RW, maxsp); /* Max spell points. */ |
83 | sint16 ACC (RW, maxsp); /* Max spell points. */ |
82 | |
84 | |
83 | sint16 ACC (RW, grace); /* Grace. Used to invoke clerical prayers. */ |
85 | sint16 ACC (RW, grace); /* Grace. Used to invoke clerical prayers. */ |
84 | sint16 ACC (RW, maxgrace); /* Grace. Used to invoke clerical prayers. */ |
86 | sint16 ACC (RW, maxgrace); /* Grace. Used to invoke clerical prayers. */ |
85 | |
87 | |
|
|
88 | // this method enforces field ordering and should not normally result in |
|
|
89 | // any code being generated strictly speaking, c++ compilers may reorder |
|
|
90 | // stat fields, so check for it and declare those compilers unsupported. |
|
|
91 | void check_ordering () const |
|
|
92 | { |
|
|
93 | assert ((sint8 *)&Str - (sint8 *)&Str == STR); |
|
|
94 | assert ((sint8 *)&Dex - (sint8 *)&Str == DEX); |
|
|
95 | assert ((sint8 *)&Con - (sint8 *)&Str == CON); |
|
|
96 | assert ((sint8 *)&Int - (sint8 *)&Str == INT); |
|
|
97 | assert ((sint8 *)&Wis - (sint8 *)&Str == WIS); |
|
|
98 | assert ((sint8 *)&Pow - (sint8 *)&Str == POW); |
|
|
99 | assert ((sint8 *)&Cha - (sint8 *)&Str == CHA); |
|
|
100 | } |
|
|
101 | |
86 | sint8 &stat (int index); |
102 | sint8 &stat (int index) |
|
|
103 | { |
|
|
104 | check_ordering (); |
|
|
105 | return ((sint8 *)&Str)[index]; |
|
|
106 | } |
|
|
107 | |
87 | sint8 stat (int index) const; |
108 | sint8 stat (int index) const |
|
|
109 | { |
|
|
110 | check_ordering (); |
|
|
111 | return ((const sint8 *)&Str)[index]; |
|
|
112 | } |
88 | }; |
113 | }; |
89 | |
114 | |
90 | #endif |
115 | #endif |
91 | |
116 | |