Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/pack.py

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
-

Powered by Google App Engine
This is Rietveld 408576698