| 378 | # @formatter:on |
| 379 | |
| 380 | def write_long(self, v): |
| 381 | if v >= 0: |
| 382 | if v < 0x40: # 00xx xxxx |
| 383 | self.ensure_write(1) |
| 384 | wi = self.wi |
| 385 | self.wi = wi + 1 |
| 386 | self.buf[wi] = v |
| 387 | elif v < 0x2000: # 010x xxxx +1B |
| 388 | self.ensure_write(2) |
| 389 | wi = self.wi |
| 390 | self.wi = wi + 2 |
| 391 | buf = self.buf |
| 392 | buf[wi] = (v >> 8) + 0x40 |
| 393 | buf[wi + 1] = v & 0xff |
| 394 | elif v < 0x10_0000: # 0110 xxxx +2B |
| 395 | self.ensure_write(3) |
| 396 | wi = self.wi |
| 397 | self.wi = wi + 3 |
| 398 | buf = self.buf |
| 399 | buf[wi] = (v >> 16) + 0x60 |
| 400 | buf[wi + 1] = (v >> 8) & 0xff |
| 401 | buf[wi + 2] = v & 0xff |
| 402 | elif v < 0x800_0000: # 0111 0xxx +3B |
| 403 | self.ensure_write(4) |
| 404 | wi = self.wi |
| 405 | self.wi = wi + 4 |
| 406 | struct.pack_into(">i", self.buf, wi, v + 0x7000_0000) |
| 407 | elif v < 0x4_0000_0000: # 0111 10xx +4B |
| 408 | self.ensure_write(5) |
| 409 | wi = self.wi |
| 410 | self.wi = wi + 5 |
| 411 | buf = self.buf |
| 412 | buf[wi] = (v >> 32) + 0x78 |
| 413 | struct.pack_into(">I", buf, wi + 1, v & 0xffff_ffff) |
| 414 | elif v < 0x200_0000_0000: # 0111 110x +5B |
| 415 | self.ensure_write(6) |
| 416 | wi = self.wi |
| 417 | self.wi = wi + 6 |
| 418 | buf = self.buf |
| 419 | buf[wi] = (v >> 40) + 0x7c |
| 420 | buf[wi + 1] = (v >> 32) & 0xff |
| 421 | struct.pack_into(">I", buf, wi + 2, v & 0xffff_ffff) |
| 422 | elif v < 0x1_0000_0000_0000: # 0111 1110 +6B |
| 423 | self.ensure_write(7) |
| 424 | wi = self.wi |
| 425 | self.wi = wi + 7 |
| 426 | buf = self.buf |
| 427 | buf[wi] = 0x7e |
| 428 | buf[wi + 1] = v >> 40 |
| 429 | buf[wi + 2] = (v >> 32) & 0xff |
| 430 | struct.pack_into(">I", buf, wi + 3, v & 0xffff_ffff) |
| 431 | elif v < 0x80_0000_0000_0000: # 0111 1111 0 +7B |
| 432 | self.ensure_write(8) |
| 433 | wi = self.wi |
| 434 | self.wi = wi + 8 |
| 435 | struct.pack_into(">Q", self.buf, wi, v + 0x7f00_0000_0000_0000) |
| 436 | else: # 0111 1111 1 +8B |
| 437 | self.ensure_write(9) |