Merge "Issue #1428: Optimize deserialize to directly lookup set method" into development

Former-commit-id: 1cfc4f1566 [formerly e97ab89d1d] [formerly 8d28163deb] [formerly 8d28163deb [formerly 76e643e876]] [formerly 1cfc4f1566 [formerly e97ab89d1d] [formerly 8d28163deb] [formerly 8d28163deb [formerly 76e643e876]] [formerly b0d47ed420 [formerly 8d28163deb [formerly 76e643e876] [formerly b0d47ed420 [formerly a5d9b113bbf644a613015fe593f4b9d4070ab167]]]]]
Former-commit-id: b0d47ed420
Former-commit-id: 96d22f6587 [formerly 2fd8ce1e29] [formerly 9007b1c424] [formerly 780bc7a713cf82d96c251a1d6765f2f670349faf [formerly 6df0cbdfa214b59e1ee4d4dd2cd80597fae9d106] [formerly 9007b1c424 [formerly 0295be792f]]]
Former-commit-id: d4abf0a0c2264dbe29b46a095a296c3b9db9feb1 [formerly 556bd041eb68e0a0f7e84dd42c40e3b20d512ba0] [formerly a309307d51 [formerly e696e879e0]]
Former-commit-id: a309307d51
Former-commit-id: 4bfa33055f
This commit is contained in:
Richard Peter 2012-12-14 17:38:41 -06:00 committed by Gerrit Code Review
commit 2a9e43ec1f

View file

@ -187,13 +187,16 @@ class ThriftSerializationContext:
# result = adapters.fieldAdapterRegistry[structname][fieldName].deserialize(self)
# else:
result = self._deserializeType(fieldType)
members = inspect.getmembers(obj, inspect.ismethod)
lookingFor = "set" + fieldName[0].upper() + fieldName[1:]
for f in members:
if f[0] == lookingFor:
f[1](result)
break
else:
try:
setMethod = getattr(obj, lookingFor)
if callable(setMethod):
setMethod(result)
else:
raise dynamicserialize.SerializationException("Couldn't find setter method " + lookingFor)
except:
raise dynamicserialize.SerializationException("Couldn't find setter method " + lookingFor)
self.protocol.readFieldEnd()
@ -206,7 +209,7 @@ class ThriftSerializationContext:
if size:
if listType not in primitiveSupport:
m = self.typeDeserializationMethod[listType]
result = [m() for n in range(size)]
result = [m() for n in xrange(size)]
else:
result = self.listDeserializationMethod[listType](size)
self.protocol.readListEnd()
@ -215,7 +218,7 @@ class ThriftSerializationContext:
def _deserializeMap(self):
keyType, valueType, size = self.protocol.readMapBegin()
result = {}
for n in range(size):
for n in xrange(size):
# can't go off the type, due to java generics limitations dynamic serialize is
# serializing keys and values as void
key = self.typeDeserializationMethod[TType.STRUCT]()
@ -227,7 +230,7 @@ class ThriftSerializationContext:
def _deserializeSet(self):
setType, setSize = self.protocol.readSetBegin()
result = set([])
for n in range(setSize):
for n in xrange(setSize):
result.add(self.typeDeserializationMethod[TType.STRUCT]())
self.protocol.readSetEnd()
return result