OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """ | 5 """ |
6 The descriptors used to define generated elements of the mojo python bindings. | 6 The descriptors used to define generated elements of the mojo python bindings. |
7 """ | 7 """ |
8 | 8 |
9 import array | 9 import array |
10 import itertools | 10 import itertools |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 result = array.array(self.array_typecode) | 365 result = array.array(self.array_typecode) |
366 result.fromstring(buffer(data, | 366 result.fromstring(buffer(data, |
367 serialization.HEADER_STRUCT.size, | 367 serialization.HEADER_STRUCT.size, |
368 size - serialization.HEADER_STRUCT.size)) | 368 size - serialization.HEADER_STRUCT.size)) |
369 return result | 369 return result |
370 | 370 |
371 | 371 |
372 class StructType(PointerType): | 372 class StructType(PointerType): |
373 """Type object for structs.""" | 373 """Type object for structs.""" |
374 | 374 |
375 def __init__(self, struct_type, nullable=False): | 375 def __init__(self, struct_type_getter, nullable=False): |
376 PointerType.__init__(self) | 376 PointerType.__init__(self) |
377 self.struct_type = struct_type | 377 self._struct_type_getter = struct_type_getter |
| 378 self._struct_type = None |
378 self.nullable = nullable | 379 self.nullable = nullable |
379 | 380 |
| 381 @property |
| 382 def struct_type(self): |
| 383 if not self._struct_type: |
| 384 self._struct_type = self._struct_type_getter() |
| 385 return self._struct_type |
| 386 |
380 def Convert(self, value): | 387 def Convert(self, value): |
381 if value is None or isinstance(value, self.struct_type): | 388 if value is None or isinstance(value, self.struct_type): |
382 return value | 389 return value |
383 raise TypeError('%r is not an instance of %r' % (value, self.struct_type)) | 390 raise TypeError('%r is not an instance of %r' % (value, self.struct_type)) |
384 | 391 |
385 def GetDefaultValue(self, value): | 392 def GetDefaultValue(self, value): |
386 if value: | 393 if value: |
387 return self.struct_type() | 394 return self.struct_type() |
388 return None | 395 return None |
389 | 396 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 | 553 |
547 | 554 |
548 def _ConvertByteToBooleans(value, min_size=0): | 555 def _ConvertByteToBooleans(value, min_size=0): |
549 "Unpack an integer into a list of booleans.""" | 556 "Unpack an integer into a list of booleans.""" |
550 res = [] | 557 res = [] |
551 while value: | 558 while value: |
552 res.append(bool(value&1)) | 559 res.append(bool(value&1)) |
553 value = value / 2 | 560 value = value / 2 |
554 res.extend([False] * (min_size - len(res))) | 561 res.extend([False] * (min_size - len(res))) |
555 return res | 562 return res |
OLD | NEW |