View source on GitHub
|
An Encoder class for protocol buffers (PB) that preserves sorting characteristics.
This is used by datastore_sqlite_stub and datastore_types to match the
ordering semantics of the production datastore. Broadly, there are four
changes from regular PB encoding:
- Strings are escaped and null terminated instead of length-prefixed. The
escaping replaces
\x00with\x01\x01and\x01with\x01\x02, thus preserving the ordering of the original string. - Variable length integers are encoded using a variable length encoding that preserves order. The first byte stores the absolute value if it's between -119 to 119, otherwise it stores the number of bytes that follow.
- Numbers are stored big endian instead of little endian.
- Negative doubles are entirely negated, while positive doubles have their sign bit flipped.
Warning:
Due to the way nested Protocol Buffers are encoded, this encoder will NOT preserve sorting characteristics for embedded protocol buffers!
Classes
class Decoder: Decoder that decodes a bytes buffer into a protocol buffer message.
class Encoder: Encodes protocol buffers in a form that sorts nicely.
Functions
EncodeDouble(...): Encode a double into a sortable byte buffer.
GetFieldNumber(...): Get the field number from the tuple returned by Message.ListFields.
View source on GitHub