MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / set

Method set

projects/Python/proto/fbe.py:973–1004  ·  view source on GitHub ↗
(self, value)

Source from the content-addressed store, hash-verified

971
972 # Set the decimal value
973 def set(self, value):
974 assert ((self._buffer.offset + self.fbe_offset + self.fbe_size) <= self._buffer.size), "Model is broken!"
975 if (self._buffer.offset + self.fbe_offset + self.fbe_size) > self._buffer.size:
976 return
977
978 # Extract decimal parts
979 parts = value.as_tuple()
980 negative = True if parts.sign == 1 else False
981 number = int(''.join(map(str, parts.digits)))
982 scale = -parts.exponent
983
984 # Check for decimal number overflow
985 bits = number.bit_length()
986 if (bits < 0) or (bits > 96):
987 # Value too big for .NET Decimal (bit length is limited to [0, 96])
988 self.write_count(self.fbe_offset, 0, self.fbe_size)
989 return
990
991 # Check for decimal scale overflow
992 if (scale < 0) or (scale > 28):
993 # Value scale exceeds .NET Decimal limit of [0, 28]
994 self.write_count(self.fbe_offset, 0, self.fbe_size)
995 return
996
997 # Write unscaled value to bytes 0-11
998 self.write_bytes(self.fbe_offset, number.to_bytes(12, "little"))
999
1000 # Write scale at byte 14
1001 self.write_byte(self.fbe_offset + 14, scale)
1002
1003 # Write signum at byte 15
1004 self.write_byte(self.fbe_offset + 15, 0x80 if negative else 0)
1005
1006
1007# Fast Binary Encoding bytes field model

Callers 1

verify_decimalMethod · 0.95

Calls 3

write_countMethod · 0.45
write_bytesMethod · 0.45
write_byteMethod · 0.45

Tested by 1

verify_decimalMethod · 0.76