コード例 #1
0
 def DecodeVarint(buffer, pos):
     result = 0
     shift = 0
     while 1:
         b = six.indexbytes(buffer, pos)
         result |= ((b & 0x7f) << shift)
         pos += 1
         if not (b & 0x80):
             result &= mask
             result = result_type(result)
             return (result, pos)
         shift += 7
         if shift >= 64:
             raise _DecodeError('Too many bytes when decoding varint.')
コード例 #2
0
ファイル: decoder.py プロジェクト: Khan/frankenserver
 def DecodeVarint(buffer, pos):
   result = 0
   shift = 0
   while 1:
     b = six.indexbytes(buffer, pos)
     result |= ((b & 0x7f) << shift)
     pos += 1
     if not (b & 0x80):
       result &= mask
       result = result_type(result)
       return (result, pos)
     shift += 7
     if shift >= 64:
       raise _DecodeError('Too many bytes when decoding varint.')
コード例 #3
0
ファイル: decoder.py プロジェクト: bopopescu/facerec-1
def ReadTag(buffer, pos):
    """Read a tag from the buffer, and return a (tag_bytes, new_pos) tuple.

  We return the raw bytes of the tag rather than decoding them.  The raw
  bytes can then be used to look up the proper decoder.  This effectively allows
  us to trade some work that would be done in pure-python (decoding a varint)
  for work that is done in C (searching for a byte string in a hash table).
  In a low-level language it would be much cheaper to decode the varint and
  use that, but not in Python.
  """

    start = pos
    while six.indexbytes(buffer, pos) & 0x80:
        pos += 1
    pos += 1
    return (six.binary_type(buffer[start:pos]), pos)
コード例 #4
0
def ReadTag(buffer, pos):
    """Read a tag from the memoryview, and return a (tag_bytes, new_pos) tuple.

  We return the raw bytes of the tag rather than decoding them.  The raw
  bytes can then be used to look up the proper decoder.  This effectively allows
  us to trade some work that would be done in pure-python (decoding a varint)
  for work that is done in C (searching for a byte string in a hash table).
  In a low-level language it would be much cheaper to decode the varint and
  use that, but not in Python.

  Args:
    buffer: memoryview object of the encoded bytes
    pos: int of the current position to start from

  Returns:
    Tuple[bytes, int] of the tag data and new position.
  """
    start = pos
    while six.indexbytes(buffer, pos) & 0x80:
        pos += 1
    pos += 1

    tag_bytes = buffer[start:pos].tobytes()
    return tag_bytes, pos
コード例 #5
0
ファイル: decoder.py プロジェクト: Khan/frankenserver
def ReadTag(buffer, pos):
  """Read a tag from the memoryview, and return a (tag_bytes, new_pos) tuple.

  We return the raw bytes of the tag rather than decoding them.  The raw
  bytes can then be used to look up the proper decoder.  This effectively allows
  us to trade some work that would be done in pure-python (decoding a varint)
  for work that is done in C (searching for a byte string in a hash table).
  In a low-level language it would be much cheaper to decode the varint and
  use that, but not in Python.

  Args:
    buffer: memoryview object of the encoded bytes
    pos: int of the current position to start from

  Returns:
    Tuple[bytes, int] of the tag data and new position.
  """
  start = pos
  while six.indexbytes(buffer, pos) & 0x80:
    pos += 1
  pos += 1

  tag_bytes = buffer[start:pos].tobytes()
  return tag_bytes, pos