Index: mojo/public/tools/bindings/pylib/mojom/generate/pack.py |
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/pack.py b/mojo/public/tools/bindings/pylib/mojom/generate/pack.py |
deleted file mode 100644 |
index c898be0dd1f7ff6577fa0888cc814ec67de471a8..0000000000000000000000000000000000000000 |
--- a/mojo/public/tools/bindings/pylib/mojom/generate/pack.py |
+++ /dev/null |
@@ -1,127 +0,0 @@ |
-# Copyright 2013 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import module as mojom |
- |
-# This module provides a mechanism for determining the packed order and offsets |
-# of a mojom.Struct. |
-# |
-# ps = pack.PackedStruct(struct) |
-# ps.packed_fields will access a list of PackedField objects, each of which |
-# will have an offset, a size and a bit (for mojom.BOOLs). |
- |
-# Size of struct header in bytes: num_bytes [4B] + version [4B]. |
-HEADER_SIZE = 8 |
- |
-class PackedField(object): |
- kind_to_size = { |
- mojom.BOOL: 1, |
- mojom.INT8: 1, |
- mojom.UINT8: 1, |
- mojom.INT16: 2, |
- mojom.UINT16: 2, |
- mojom.INT32: 4, |
- mojom.UINT32: 4, |
- mojom.FLOAT: 4, |
- mojom.HANDLE: 4, |
- mojom.MSGPIPE: 4, |
- mojom.SHAREDBUFFER: 4, |
- mojom.DCPIPE: 4, |
- mojom.DPPIPE: 4, |
- mojom.NULLABLE_HANDLE: 4, |
- mojom.NULLABLE_MSGPIPE: 4, |
- mojom.NULLABLE_SHAREDBUFFER: 4, |
- mojom.NULLABLE_DCPIPE: 4, |
- mojom.NULLABLE_DPPIPE: 4, |
- mojom.INT64: 8, |
- mojom.UINT64: 8, |
- mojom.DOUBLE: 8, |
- mojom.STRING: 8, |
- mojom.NULLABLE_STRING: 8 |
- } |
- |
- @classmethod |
- def GetSizeForKind(cls, kind): |
- if isinstance(kind, (mojom.Array, mojom.Map, mojom.Struct, |
- mojom.Interface)): |
- return 8 |
- if isinstance(kind, mojom.Union): |
- return 16 |
- if isinstance(kind, mojom.InterfaceRequest): |
- kind = mojom.MSGPIPE |
- if isinstance(kind, mojom.Enum): |
- # TODO(mpcomplete): what about big enums? |
- return cls.kind_to_size[mojom.INT32] |
- if not kind in cls.kind_to_size: |
- raise Exception("Invalid kind: %s" % kind.spec) |
- return cls.kind_to_size[kind] |
- |
- def __init__(self, field): |
- """ |
- Args: |
- field: the original field. |
- """ |
- self.field = field |
- self.index = field.declaration_order |
- self.ordinal = field.computed_ordinal |
- self.size = self.GetSizeForKind(field.kind) |
- self.offset = field.computed_offset |
- self.bit = field.computed_bit |
- self.min_version = field.computed_min_version |
- |
- |
-def GetPad(offset, alignment): |
- """Returns the pad necessary to reserve space so that |offset + pad| equals to |
- some multiple of |alignment|.""" |
- return (alignment - (offset % alignment)) % alignment |
- |
- |
-class PackedStruct(object): |
- def __init__(self, struct): |
- self.struct = struct |
- |
- # |packed_fields_in_ordinal_order| contains all the fields, |
- # in ordinal order. |
- self.packed_fields_in_ordinal_order = [PackedField(field) |
- for field in struct.fields_in_ordinal_order] |
- |
- # |packed_fields| refers to the same fields as |
- # |packed_fields_in_ordinal_order|, but in increasing offset order. |
- self.packed_fields = [field for field in |
- self.packed_fields_in_ordinal_order] |
- self.packed_fields.sort(key=lambda f: (f.offset, f.bit)) |
- |
-class ByteInfo(object): |
- def __init__(self): |
- self.is_padding = False |
- self.packed_fields = [] |
- |
- |
-def GetByteLayout(packed_struct): |
- total_payload_size = packed_struct.struct.versions[-1].num_bytes - HEADER_SIZE |
- bytes = [ByteInfo() for i in xrange(total_payload_size)] |
- |
- limit_of_previous_field = 0 |
- for packed_field in packed_struct.packed_fields: |
- for i in xrange(limit_of_previous_field, packed_field.offset): |
- bytes[i].is_padding = True |
- bytes[packed_field.offset].packed_fields.append(packed_field) |
- limit_of_previous_field = packed_field.offset + packed_field.size |
- |
- for i in xrange(limit_of_previous_field, len(bytes)): |
- bytes[i].is_padding = True |
- |
- for byte in bytes: |
- # A given byte cannot both be padding and have a fields packed into it. |
- assert not (byte.is_padding and byte.packed_fields) |
- |
- return bytes |
- |
- |
-class VersionInfo(object): |
- def __init__(self, version, num_fields, num_bytes): |
- self.version = version |
- self.num_fields = num_fields |
- self.num_bytes = num_bytes |
- |