don't convert to floating-point unless necessary

This commit is contained in:
David Rose 2003-04-14 18:27:26 +00:00
parent 53fee65d08
commit db3e6216e5

View File

@ -2,59 +2,108 @@
def putArg(self, arg, subatomicType, divisor=1): def putArg(self, arg, subatomicType, divisor=1):
# Import the type numbers # Import the type numbers
import DCSubatomicType import DCSubatomicType
if subatomicType == DCSubatomicType.STInt8: if (divisor == 1):
self.addInt8(int(round(arg*divisor))) if subatomicType == DCSubatomicType.STInt8:
elif subatomicType == DCSubatomicType.STInt16: self.addInt8(arg)
self.addInt16(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STInt16:
elif subatomicType == DCSubatomicType.STInt32: self.addInt16(arg)
self.addInt32(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STInt32:
elif subatomicType == DCSubatomicType.STInt64: self.addInt32(arg)
self.addInt64(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STInt64:
elif subatomicType == DCSubatomicType.STUint8: self.addInt64(arg)
self.addUint8(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STUint8:
elif subatomicType == DCSubatomicType.STUint16: self.addUint8(arg)
self.addUint16(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STUint16:
elif subatomicType == DCSubatomicType.STUint32: self.addUint16(arg)
self.addUint32(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STUint32:
elif subatomicType == DCSubatomicType.STUint64: self.addUint32(arg)
self.addUint64(int(round(arg*divisor))) elif subatomicType == DCSubatomicType.STUint64:
elif subatomicType == DCSubatomicType.STFloat64: self.addUint64(arg)
self.addFloat64(arg) elif subatomicType == DCSubatomicType.STFloat64:
elif subatomicType == DCSubatomicType.STString: self.addFloat64(arg)
self.addString(arg) elif subatomicType == DCSubatomicType.STString:
elif subatomicType == DCSubatomicType.STBlob: self.addString(arg)
self.addString(arg) elif subatomicType == DCSubatomicType.STBlob:
elif subatomicType == DCSubatomicType.STInt8array: self.addString(arg)
self.addUint16(len(arg)) elif subatomicType == DCSubatomicType.STInt8array:
for i in arg: self.addUint16(len(arg))
self.addInt8(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STInt16array: self.addInt8(i)
self.addUint16(len(arg) << 1) elif subatomicType == DCSubatomicType.STInt16array:
for i in arg: self.addUint16(len(arg) << 1)
self.addInt16(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STInt32array: self.addInt16(i)
self.addUint16(len(arg) << 2) elif subatomicType == DCSubatomicType.STInt32array:
for i in arg: self.addUint16(len(arg) << 2)
self.addInt32(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STUint8array: self.addInt32(i)
self.addUint16(len(arg)) elif subatomicType == DCSubatomicType.STUint8array:
for i in arg: self.addUint16(len(arg))
self.addUint8(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STUint16array: self.addUint8(i)
self.addUint16(len(arg) << 1) elif subatomicType == DCSubatomicType.STUint16array:
for i in arg: self.addUint16(len(arg) << 1)
self.addUint16(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STUint32array: self.addUint16(i)
self.addUint16(len(arg) << 2) elif subatomicType == DCSubatomicType.STUint32array:
for i in arg: self.addUint16(len(arg) << 2)
self.addUint32(int(round(i*divisor))) for i in arg:
elif subatomicType == DCSubatomicType.STUint32uint8array: self.addUint32(i)
self.addUint16(len(arg) * 5) elif subatomicType == DCSubatomicType.STUint32uint8array:
for i in arg: self.addUint16(len(arg) * 5)
self.addUint32(int(round(i[0]*divisor))) for i in arg:
self.addUint8(int(round(i[1]*divisor))) self.addUint32(i[0])
self.addUint8(i[1])
else:
raise Exception("Error: No such type as: " + str(subatomicType))
else: else:
raise Exception("Error: No such type as: " + str(subatomicType)) if subatomicType == DCSubatomicType.STInt8:
self.addInt8(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt16:
self.addInt16(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt32:
self.addInt32(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt64:
self.addInt64(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint8:
self.addUint8(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint16:
self.addUint16(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint32:
self.addUint32(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint64:
self.addUint64(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt8array:
self.addUint16(len(arg))
for i in arg:
self.addInt8(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STInt16array:
self.addUint16(len(arg) << 1)
for i in arg:
self.addInt16(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STInt32array:
self.addUint16(len(arg) << 2)
for i in arg:
self.addInt32(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint8array:
self.addUint16(len(arg))
for i in arg:
self.addUint8(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint16array:
self.addUint16(len(arg) << 1)
for i in arg:
self.addUint16(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint32array:
self.addUint16(len(arg) << 2)
for i in arg:
self.addUint32(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint32uint8array:
self.addUint16(len(arg) * 5)
for i in arg:
self.addUint32(int(round(i[0]*divisor)))
self.addUint8(int(round(i[1]*divisor)))
else:
raise Exception("Error: type does not accept divisor: " + str(subatomicType))
return None return None