Index: client/samples/swarm/appengine/encoder.py |
=================================================================== |
--- client/samples/swarm/appengine/encoder.py (revision 3770) |
+++ client/samples/swarm/appengine/encoder.py (working copy) |
@@ -1,60 +0,0 @@ |
-# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
-# for details. All rights reserved. Use of this source code is governed by a |
-# BSD-style license that can be found in the LICENSE file. |
- |
-''' |
-This Encoder shares a lot in common with protobufs. It uses variable length |
-ints and size-encoded strings and binary values. Other than being hugely |
-stripped down, the major conceptual difference is that this encoding |
-is UTF8 "safe". This means that it generates a form that should be passed |
-on the wire as UTF8 and then can be very efficiently decoded by JS in the |
-browser which natively handles these kinds of strings. To stay efficient in |
-this range, all numeric data is encoded in only 7 bits. |
-''' |
- |
-import base64 |
- |
-class Encoder: |
- def __init__(self): |
- self.data = [] |
- |
- def writeInt(self, value): |
- '''Uses a 7-bit per byte encoding to stay UTF-8 "safe".''' |
- bits = value & 0x3f |
- value >>= 6 |
- while value: |
- self.data.append(chr(0x40|bits)) |
- bits = value & 0x3f |
- value >>= 6 |
- self.data.append(chr(bits)) |
- |
- def writeBool(self, b): |
- self.data.append(('F', 'T')[b]) |
- |
- def writeString(self, s): |
- if not s: s = '' |
- self.writeInt(len(s)) |
- self.data.append(s) |
- |
- def writeBinary(self, s): |
- '''Encode binary data using base64. This is less efficient than a 7-bit |
- encoding would be; however, it can be decoded much faster on most |
- browsers due to native support for the format.''' |
- v = base64.b64encode(s) |
- self.writeInt(len(v)) |
- self.data.append(v) |
- |
- def writeList(self, l): |
- self.writeInt(len(l)) |
- for i in l: |
- i.encode(self) |
- |
- def writeRaw(self, s): |
- self.data.append(s) |
- |
- def finish(self): |
- d = ''.join(self.data) |
- return _encVarInt(len(d)) + d |
- |
- def getRaw(self): |
- return ''.join(self.data) |