Skip to content

Commit 51182b9

Browse files
committed
FixedDict支持 key in xxx方法。
1 parent 397c546 commit 51182b9

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

kbe/src/lib/entitydef/entities.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,16 @@ PyMappingMethods Entities<T>::mappingMethods =
116116
template<typename T>
117117
PySequenceMethods Entities<T>::mappingSequenceMethods =
118118
{
119-
0, /* sq_length */
120-
0, /* sq_concat */
121-
0, /* sq_repeat */
122-
0, /* sq_item */
123-
0, /* sq_slice */
124-
0, /* sq_ass_item */
125-
0, /* sq_ass_slice */
126-
PyMapping_HasKey, /* sq_contains */
127-
0, /* sq_inplace_concat */
128-
0, /* sq_inplace_repeat */
119+
0, /* sq_length */
120+
0, /* sq_concat */
121+
0, /* sq_repeat */
122+
0, /* sq_item */
123+
0, /* sq_slice */
124+
0, /* sq_ass_item */
125+
0, /* sq_ass_slice */
126+
PyMapping_HasKey, /* sq_contains */
127+
0, /* sq_inplace_concat */
128+
0, /* sq_inplace_repeat */
129129
};
130130

131131
TEMPLATE_SCRIPT_METHOD_DECLARE_BEGIN(template<typename T>, Entities<T>, Entities)

kbe/src/lib/entitydef/fixeddict.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,21 @@ PyMappingMethods FixedDict::mappingMethods =
3131
(objobjargproc)FixedDict::mp_ass_subscript // mp_ass_subscript
3232
};
3333

34+
// 参考 objects/dictobject.c
35+
// Hack to implement "key in dict"
36+
PySequenceMethods FixedDict::mappingSequenceMethods =
37+
{
38+
0, /* sq_length */
39+
0, /* sq_concat */
40+
0, /* sq_repeat */
41+
0, /* sq_item */
42+
0, /* sq_slice */
43+
0, /* sq_ass_item */
44+
0, /* sq_ass_slice */
45+
PyMapping_HasKey, /* sq_contains */
46+
0, /* sq_inplace_concat */
47+
0, /* sq_inplace_repeat */
48+
};
3449

3550
SCRIPT_METHOD_DECLARE_BEGIN(FixedDict)
3651
SCRIPT_METHOD_DECLARE("__reduce_ex__", reduce_ex__, METH_VARARGS, 0)
@@ -46,7 +61,7 @@ SCRIPT_MEMBER_DECLARE_END()
4661

4762
SCRIPT_GETSET_DECLARE_BEGIN(FixedDict)
4863
SCRIPT_GETSET_DECLARE_END()
49-
SCRIPT_INIT(FixedDict, 0, 0, &FixedDict::mappingMethods, 0, 0)
64+
SCRIPT_INIT(FixedDict, 0, &FixedDict::mappingSequenceMethods, &FixedDict::mappingMethods, 0, 0)
5065

5166
//-------------------------------------------------------------------------------------
5267
FixedDict::FixedDict(DataType* dataType, std::string& strDictInitData):

kbe/src/lib/entitydef/fixeddict.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class FixedDict : public script::Map
3636
INSTANCE_SCRIPT_HREADER(FixedDict, Map)
3737
public:
3838
static PyMappingMethods mappingMethods;
39+
static PySequenceMethods mappingSequenceMethods;
3940

4041
FixedDict(DataType* dataType);
4142
FixedDict(DataType* dataType, std::string& strDictInitData);

kbe/src/lib/pyscript/map.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@ PyMappingMethods Map::mappingMethods =
3434
// Hack to implement "key in dict"
3535
PySequenceMethods Map::mappingSequenceMethods =
3636
{
37-
0, /* sq_length */
38-
0, /* sq_concat */
39-
0, /* sq_repeat */
40-
0, /* sq_item */
41-
0, /* sq_slice */
42-
0, /* sq_ass_item */
43-
0, /* sq_ass_slice */
44-
PyMapping_HasKey, /* sq_contains */
45-
0, /* sq_inplace_concat */
46-
0, /* sq_inplace_repeat */
37+
0, /* sq_length */
38+
0, /* sq_concat */
39+
0, /* sq_repeat */
40+
0, /* sq_item */
41+
0, /* sq_slice */
42+
0, /* sq_ass_item */
43+
0, /* sq_ass_slice */
44+
PyMapping_HasKey, /* sq_contains */
45+
0, /* sq_inplace_concat */
46+
0, /* sq_inplace_repeat */
4747
};
4848

4949
SCRIPT_METHOD_DECLARE_BEGIN(Map)

0 commit comments

Comments
 (0)