25
25
namespace atom
26
26
{
27
27
28
+ PACK (struct MemberModes
29
+ {
30
+ GetAttr::Mode getattr: 4 ;
31
+ PostGetAttr::Mode post_getattr: 3 ;
32
+ SetAttr::Mode setattr: 4 ;
33
+ PostSetAttr::Mode post_setattr: 3 ;
34
+ DefaultValue::Mode default_value: 4 ;
35
+ Validate::Mode validate: 5 ;
36
+ PostValidate::Mode post_validate: 3 ;
37
+ DelAttr::Mode delattr: 3 ;
38
+ GetState::Mode getstate: 3 ;
39
+ });
40
+
28
41
struct Member
29
42
{
30
43
PyObject_HEAD
31
- uint64_t modes;
32
- uint64_t extra_modes;
33
- uint32_t index;
34
44
PyObject* name;
35
45
PyObject* metadata;
36
46
PyObject* getattr_context;
@@ -44,6 +54,8 @@ struct Member
44
54
PyObject* getstate_context;
45
55
ModifyGuard<Member>* modify_guard;
46
56
std::vector<Observer>* static_observers;
57
+ MemberModes modes;
58
+ uint32_t index;
47
59
48
60
static PyType_Spec TypeObject_Spec;
49
61
@@ -57,101 +69,92 @@ struct Member
57
69
58
70
GetAttr::Mode get_getattr_mode ()
59
71
{
60
- return static_cast <GetAttr::Mode>( modes & 0xff ) ;
72
+ return modes. getattr ;
61
73
}
62
74
63
75
void set_getattr_mode ( GetAttr::Mode mode )
64
76
{
65
- uint64_t mask = UINT64_C ( 0xffffffffffffff00 );
66
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) );
77
+ modes.getattr = mode;
67
78
}
68
79
69
80
SetAttr::Mode get_setattr_mode ()
70
81
{
71
- return static_cast <SetAttr::Mode>( ( modes >> 8 ) & 0xff ) ;
82
+ return modes. setattr ;
72
83
}
73
84
74
85
void set_setattr_mode ( SetAttr::Mode mode )
75
86
{
76
- uint64_t mask = UINT64_C ( 0xffffffffffff00ff );
77
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 8 );
87
+ modes.setattr = mode;
78
88
}
79
89
80
90
PostGetAttr::Mode get_post_getattr_mode ()
81
91
{
82
- return static_cast <PostGetAttr::Mode>( ( modes >> 16 ) & 0xff ) ;
92
+ return modes. post_getattr ;
83
93
}
84
94
85
95
void set_post_getattr_mode ( PostGetAttr::Mode mode )
86
96
{
87
- uint64_t mask = UINT64_C ( 0xffffffffff00ffff );
88
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 16 );
97
+ modes.post_getattr = mode;
89
98
}
90
99
91
100
PostSetAttr::Mode get_post_setattr_mode ()
92
101
{
93
- return static_cast <PostSetAttr::Mode>( ( modes >> 24 ) & 0xff ) ;
102
+ return modes. post_setattr ;
94
103
}
95
104
96
105
void set_post_setattr_mode ( PostSetAttr::Mode mode )
97
106
{
98
- uint64_t mask = UINT64_C ( 0xffffffff00ffffff );
99
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 24 );
107
+ modes.post_setattr = mode;
100
108
}
101
109
102
110
DefaultValue::Mode get_default_value_mode ()
103
111
{
104
- return static_cast <DefaultValue::Mode>( ( modes >> 32 ) & 0xff ) ;
112
+ return modes. default_value ;
105
113
}
106
114
107
115
void set_default_value_mode ( DefaultValue::Mode mode )
108
116
{
109
- uint64_t mask = UINT64_C ( 0xffffff00ffffffff );
110
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 32 );
117
+ modes.default_value = mode;
111
118
}
112
119
113
120
Validate::Mode get_validate_mode ()
114
121
{
115
- return static_cast <Validate::Mode>( ( modes >> 40 ) & 0xff ) ;
122
+ return modes. validate ;
116
123
}
117
124
118
125
void set_validate_mode ( Validate::Mode mode )
119
126
{
120
- uint64_t mask = UINT64_C ( 0xffff00ffffffffff );
121
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 40 );
127
+ modes.validate = mode;
122
128
}
123
129
124
130
PostValidate::Mode get_post_validate_mode ()
125
131
{
126
- return static_cast <PostValidate::Mode>( ( modes >> 48 ) & 0xff ) ;
132
+ return modes. post_validate ;
127
133
}
128
134
129
135
void set_post_validate_mode ( PostValidate::Mode mode )
130
136
{
131
- uint64_t mask = UINT64_C ( 0xff00ffffffffffff );
132
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 48 );
137
+ modes.post_validate = mode;
133
138
}
134
139
135
140
DelAttr::Mode get_delattr_mode ()
136
141
{
137
- return static_cast <DelAttr::Mode>( ( modes >> 56 ) & 0xff ) ;
142
+ return modes. delattr ;
138
143
}
139
144
140
145
void set_delattr_mode ( DelAttr::Mode mode )
141
146
{
142
- uint64_t mask = UINT64_C ( 0x00ffffffffffffff );
143
- modes = ( modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) << 56 );
147
+ modes.delattr = mode;
144
148
}
145
149
146
150
GetState::Mode get_getstate_mode ()
147
151
{
148
- return static_cast <GetState::Mode>( ( extra_modes ) & 0xff ) ;
152
+ return modes. getstate ;
149
153
}
150
154
151
155
void set_getstate_mode ( GetState::Mode mode )
152
156
{
153
- uint64_t mask = UINT64_C ( 0xffffffffffffff00 );
154
- extra_modes = ( extra_modes & mask ) | ( static_cast <uint64_t >( mode & 0xff ) );
157
+ modes.getstate = mode;
155
158
}
156
159
157
160
PyObject* getattr ( CAtom* atom );
0 commit comments