Exemple #1
0
    def write(self, io: ByteIo, value: int) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        b: bytes = struct.pack(">i", value)
        buffer_len: int = len(b)
        found: bool = False

        for i in range(0, len(b)):
            if not found and b[i] == 0:
                buffer_len = buffer_len - 1
            else:
                found = True

        if buffer_len == 4:
            io.write(self.size_4)
            io.write4(value)
        elif buffer_len == 3:
            io.write(self.size_3)
            io.write3(value)
        elif buffer_len == 2:
            io.write(self.size_2)
            io.write2(value)
        elif buffer_len <= 1:
            io.write(self.size_1)
            io.write1(value)
        else:
            raise TypeError(f"Could not serialize int {value}")
    def write(self, io: ByteIo, array: List[T]) -> None:
        if array is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(array), self.reserved_byte)
        for item in array:
            self.codec.write(io, item)
    def write(self, io: ByteIo, array: List[bytes]) -> None:
        if array is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(array), self.reserved_byte)
        for b in array:
            io.write(b)
Exemple #4
0
    def write(self, io: ByteIo, array: List[str]) -> None:
        if array is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        encoded: bytes = "".join(array).encode("UTF-8")
        io.write_size(len(encoded), self.reserved_byte)
        io.write(encoded)
    def write(self, io: ByteIo, array: List[int]) -> None:
        if array is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(array), self.reserved_byte)

        for element in array:
            io.write1(element >> 8)
            io.write1(element)
    def write(self, io: ByteIo, collection: Set[T]) -> None:
        if collection is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(collection), self.reserved_byte)

        for value in collection:
            codec: Codec = self.value_codec
            if codec is None:
                codec = self.codec_cache.codec_for(value)
            codec.write(io, value)
    def write(self, io: ByteIo, value: str) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        ordinal: int = ord(value)

        if ordinal >= 32768:
            io.write(self.size_3)
            io.write3(ordinal)
            return
        if ordinal >= 128:
            io.write(self.size_2)
            io.write2(ordinal)
            return

        io.write(self.size_1)
        io.write((ordinal & 0xFF).to_bytes(1, byteorder="big"))
Exemple #8
0
    def write(self, io: ByteIo, dictionary: Dict[T, U]) -> None:
        if dictionary is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(dictionary), self.reserved_byte)

        for key, value in dictionary.items():
            k_codec: Codec[T] = self.key_codec
            if k_codec is None:
                k_codec = self.codec_cache.codec_for(key)

            v_codec: Codec[U] = self.value_codec
            if v_codec is None:
                v_codec = self.codec_cache.codec_for(value)

            k_codec.write(io, key)
            v_codec.write(io, value)
    def write(self, io: ByteIo, array: List[bool]) -> None:
        if array is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write_size(len(array), self.reserved_byte)
        current_count: int = 0
        value: int = 0

        for element in array:
            bool_int: int = 0
            if element:
                bool_int = 1
            value = value << 1 | bool_int
            if current_count == 7:
                current_count = 0
                io.write1(value)
            else:
                current_count = current_count + 1
        if current_count > 0:
            io.write1(value << (8 - current_count))
Exemple #10
0
    def write(self, io: ByteIo, value: bytes) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write(self.byte_bytes)
        io.write(value)
    def write(self, io: ByteIo, value: bool) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        if value:
            io.write(self.true_bytes)
        else:
            io.write(self.false_bytes)
Exemple #12
0
    def write(self, io: ByteIo, collection: Deque[T]) -> None:
        if collection is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        io.write(self.start)
        for value in collection:
            codec: Codec = self.value_codec
            if codec is None:
                codec = self.codec_cache.codec_for(value)
            codec.write(io, value)
        io.write(self.end)
    def write(self, io: ByteIo, collection: str) -> None:
        if collection is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        data: bytes = collection.encode("UTF-8")
        length: int = len(data)
        if length < self.size_1 - self.optimized_from:
            io.write(to_byte((self.optimized_from + length) & 0xFF))
        else:
            io.write_size(length, to_byte(self.size_1))
        if length != 0:
            io.write(data)
Exemple #14
0
    def write(self, io: ByteIo, value: float) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        packed: bytes = struct.pack(">d", value)
        long: int = int_from_byte(packed)
        if long < -2147483648:
            if long < -549755813888:
                if long < -140737488355328:
                    if long < -36028797018963968:
                        io.write(self.size_8)
                        io.write8(long)
                    else:
                        io.write(self.size_7)
                        io.write7(long)
                else:
                    io.write(self.size_6)
                    io.write6(long)
            else:
                io.write(self.size_5)
                io.write5(long)
        elif long < 128:
            if long < -128:
                if long < -32768:
                    if long < -8388608:
                        io.write(self.size_4)
                        io.write4(long)
                    else:
                        io.write(self.size_3)
                        io.write3(long)
                else:
                    io.write(self.size_2)
                    io.write2(long)
            else:
                io.write(self.size_1)
                io.write1(long)
        elif long < 2147483648:
            if long < 8388608:
                if long < 32768:
                    io.write(self.size_2)
                    io.write2(long)
                else:
                    io.write(self.size_3)
                    io.write3(long)
            else:
                io.write(self.size_4)
                io.write4(long)
        elif long < 140737488355328:
            if long < 549755813888:
                io.write(self.size_5)
                io.write5(long)
            else:
                io.write(self.size_6)
                io.write6(long)
        elif long < 36028797018963968:
            io.write(self.size_7)
            io.write7(long)
        else:
            io.write(self.size_8)
            io.write8(long)
Exemple #15
0
    def write(self, io: ByteIo, value: float) -> None:
        if value is None:
            io.write(NoneCodec.NONE_VALUE)
            return

        packed: bytes = struct.pack(">f", value)
        long: int = int_from_byte(packed)
        if long < -128:
            if long < -32768:
                if long < -8388608:
                    io.write(self.size_4)
                    io.write4(long)
                else:
                    io.write(self.size_3)
                    io.write3(long)
            else:
                io.write(self.size_2)
                io.write2(long)
        elif long < 32768:
            if long < 128:
                io.write(self.size_1)
                io.write1(long)
            else:
                io.write(self.size_2)
                io.write2(long)
        elif long < 8388608:
            io.write(self.size_3)
            io.write3(long)
        else:
            io.write(self.size_4)
            io.write4(long)
Exemple #16
0
 def write(self, io: ByteIo, value: None) -> None:
     io.write(NoneCodec.NONE_VALUE)