MCPcopy Create free account
hub / github.com/e2wugui/zeze / write_long

Method write_long

python/zeze/buffer.py:380–504  ·  view source on GitHub ↗
(self, v)

Source from the content-addressed store, hash-verified

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)

Callers 6

encodeMethod · 0.95
write_intMethod · 0.95
test_longMethod · 0.95
check_longMethod · 0.95
check_skip_longMethod · 0.95
encodeMethod · 0.80

Calls 1

ensure_writeMethod · 0.95

Tested by 3

test_longMethod · 0.76
check_longMethod · 0.76
check_skip_longMethod · 0.76