1 # The MIT License (MIT)
3 # Copyright (c) 2015 Philippe Proulx <pproulx@efficios.com>
5 # Permission is hereby granted, free of charge, to any person obtaining a copy
6 # of this software and associated documentation files (the "Software"), to deal
7 # in the Software without restriction, including without limitation the rights
8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 # copies of the Software, and to permit persons to whom the Software is
10 # furnished to do so, subject to the following conditions:
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28 class ByteOrder(enum
.Enum
):
34 class Encoding(enum
.Enum
):
54 class PropertyMapping
:
55 def __init__(self
, object, prop
):
64 def object(self
, value
):
72 def prop(self
, value
):
78 self
.set_default_size()
79 self
.set_default_align()
80 self
.set_default_signed()
81 self
.set_default_byte_order()
82 self
.set_default_base()
83 self
.set_default_encoding()
84 self
.set_default_property_mappings()
86 def set_default_size(self
):
89 def set_default_align(self
):
92 def set_default_signed(self
):
95 def set_default_byte_order(self
):
96 self
._byte
_order
= None
98 def set_default_base(self
):
101 def set_default_encoding(self
):
102 self
._encoding
= Encoding
.NONE
104 def set_default_property_mappings(self
):
105 self
._property
_mappings
= []
112 def signed(self
, value
):
116 def byte_order(self
):
117 return self
._byte
_order
120 def byte_order(self
, value
):
121 self
._byte
_order
= value
128 def base(self
, value
):
133 return self
._encoding
136 def encoding(self
, value
):
137 self
._encoding
= value
141 if self
._align
is None:
142 if self
._size
is None:
145 if self
._size
% 8 == 0:
153 def align(self
, value
):
161 def size(self
, value
):
165 def property_mappings(self
):
166 return self
._property
_mappings
169 class FloatingPoint(Type
):
171 self
.set_default_exp_size()
172 self
.set_default_mant_size()
173 self
.set_default_align()
174 self
.set_default_byte_order()
176 def set_default_exp_size(self
):
177 self
._exp
_size
= None
179 def set_default_mant_size(self
):
180 self
._mant
_size
= None
182 def set_default_align(self
):
185 def set_default_byte_order(self
):
186 self
._byte
_order
= None
190 return self
._exp
_size
193 def exp_size(self
, value
):
194 self
._exp
_size
= value
198 return self
._mant
_size
201 def mant_size(self
, value
):
202 self
._mant
_size
= value
206 if self
._exp
_size
is None or self
._mant
_size
is None:
209 return self
._exp
_size
+ self
._mant
_size
212 def byte_order(self
):
213 return self
._byte
_order
216 def byte_order(self
, value
):
217 self
._byte
_order
= value
224 def align(self
, value
):
230 self
.set_default_value_type()
231 self
.set_default_members()
233 def set_default_value_type(self
):
234 self
._value
_type
= None
236 def set_default_members(self
):
237 self
._members
= collections
.OrderedDict()
241 return self
._value
_type
.align
245 return self
._value
_type
.size
248 def value_type(self
):
249 return self
._value
_type
252 def value_type(self
, value
):
253 self
._value
_type
= value
260 def last_value(self
):
261 if not self
._members
:
264 return list(self
._members
.values())[-1][1]
266 def value_of(self
, label
):
267 return self
._members
[label
]
269 def label_of(self
, value
):
270 for label
, vrange
in self
._members
.items():
271 if value
>= vrange
[0] and value
<= vrange
[1]:
274 def __getitem__(self
, key
):
276 return self
.value_of(key
)
277 elif type(key
) is int:
278 return self
.label_of(key
)
280 raise TypeError('wrong subscript type')
285 self
.set_default_encoding()
287 def set_default_encoding(self
):
288 self
._encoding
= Encoding
.UTF8
296 return self
._encoding
299 def encoding(self
, value
):
300 self
._encoding
= value
303 def is_dynamic(self
):
309 self
.set_default_element_type()
310 self
.set_default_length()
312 def set_default_element_type(self
):
313 self
._default
_element
_type
= None
315 def set_default_length(self
):
316 self
._default
_length
= None
320 return self
._element
_type
.align
323 def element_type(self
):
324 return self
._element
_type
327 def element_type(self
, value
):
328 self
._element
_type
= value
335 def length(self
, value
):
341 self
.set_default_min_align()
342 self
.set_default_fields()
344 def set_default_min_align(self
):
347 def set_default_fields(self
):
348 self
._fields
= collections
.OrderedDict()
352 return self
._min
_align
355 def min_align(self
, value
):
356 self
._min
_align
= value
360 align
= self
.min_align
362 for field
in self
.fields
.values():
363 if field
.align
is None:
366 if field
.align
> align
:
375 def __getitem__(self
, key
):
376 return self
.fields
[key
]
379 return len(self
._fields
)
384 self
._byte
_order
= None
385 self
._packet
_header
_type
= None
393 def uuid(self
, value
):
397 def byte_order(self
):
398 return self
._byte
_order
401 def byte_order(self
, value
):
402 self
._byte
_order
= value
405 def packet_header_type(self
):
406 return self
._packet
_header
_type
408 @packet_header_type.setter
409 def packet_header_type(self
, value
):
410 self
._packet
_header
_type
= value
413 class Env(collections
.OrderedDict
):
419 self
.set_default_name()
420 self
.set_default_uuid()
421 self
.set_default_description()
422 self
.set_default_freq()
423 self
.set_default_error_cycles()
424 self
.set_default_offset_seconds()
425 self
.set_default_offset_cycles()
426 self
.set_default_absolute()
427 self
.set_default_return_ctype()
429 def set_default_name(self
):
432 def set_default_uuid(self
):
435 def set_default_description(self
):
436 self
._description
= None
438 def set_default_freq(self
):
439 self
._freq
= 1000000000
441 def set_default_error_cycles(self
):
442 self
._error
_cycles
= 0
444 def set_default_offset_seconds(self
):
445 self
._offset
_seconds
= 0
447 def set_default_offset_cycles(self
):
448 self
._offset
_cycles
= 0
450 def set_default_absolute(self
):
451 self
._absolute
= False
453 def set_default_return_ctype(self
):
454 self
._return
_ctype
= 'uint32_t'
461 def name(self
, value
):
469 def uuid(self
, value
):
473 def description(self
):
474 return self
._description
477 def description(self
, value
):
478 self
._description
= value
481 def error_cycles(self
):
482 return self
._error
_cycles
485 def error_cycles(self
, value
):
486 self
._error
_cycles
= value
493 def freq(self
, value
):
497 def offset_seconds(self
):
498 return self
._offset
_seconds
500 @offset_seconds.setter
501 def offset_seconds(self
, value
):
502 self
._offset
_seconds
= value
505 def offset_cycles(self
):
506 return self
._offset
_cycles
508 @offset_cycles.setter
509 def offset_cycles(self
, value
):
510 self
._offset
_cycles
= value
514 return self
._absolute
517 def absolute(self
, value
):
518 self
._absolute
= value
521 def return_ctype(self
):
522 return self
._return
_ctype
525 def return_ctype(self
, value
):
526 self
._return
_ctype
= value
529 LogLevel
= collections
.namedtuple('LogLevel', ['name', 'value'])
536 self
._log
_level
= None
537 self
._context
_type
= None
538 self
._payload
_type
= None
553 def name(self
, value
):
558 return self
._log
_level
561 def log_level(self
, value
):
562 self
._log
_level
= value
565 def context_type(self
):
566 return self
._context
_type
569 def context_type(self
, value
):
570 self
._context
_type
= value
573 def payload_type(self
):
574 return self
._payload
_type
577 def payload_type(self
, value
):
578 self
._payload
_type
= value
580 def __getitem__(self
, key
):
581 assert(type(self
.payload_type
) is Struct
)
582 return self
.payload_type
[key
]
589 self
._packet
_context
_type
= None
590 self
._event
_header
_type
= None
591 self
._event
_context
_type
= None
592 self
._events
= collections
.OrderedDict()
599 def name(self
, value
):
611 def packet_context_type(self
):
612 return self
._packet
_context
_type
614 @packet_context_type.setter
615 def packet_context_type(self
, value
):
616 self
._packet
_context
_type
= value
619 def event_header_type(self
):
620 return self
._event
_header
_type
622 @event_header_type.setter
623 def event_header_type(self
, value
):
624 self
._event
_header
_type
= value
627 def event_context_type(self
):
628 return self
._event
_context
_type
630 @event_context_type.setter
631 def event_context_type(self
, value
):
632 self
._event
_context
_type
= value
638 def is_event_empty(self
, event
):
641 if self
.event_header_type
:
642 total_fields
+= len(self
.event_header_type
)
644 if self
.event_context_type
:
645 total_fields
+= len(self
.event_context_type
)
647 if event
.context_type
:
648 total_fields
+= len(event
.context_type
)
650 if event
.payload_type
:
651 total_fields
+= len(event
.payload_type
)
653 return total_fields
== 0
659 self
._env
= collections
.OrderedDict()
660 self
._clocks
= collections
.OrderedDict()
661 self
._streams
= collections
.OrderedDict()
662 self
._default
_stream
_name
= None
669 def trace(self
, value
):
677 def env(self
, value
):
685 def clocks(self
, value
):
693 def streams(self
, value
):
694 self
._streams
= value
697 def default_stream_name(self
):
698 return self
._default
_stream
_name
700 @default_stream_name.setter
701 def default_stream_name(self
, value
):
702 self
._default
_stream
_name
= value
705 def default_stream(self
):
706 if self
._default
_stream
_name
in self
._streams
:
707 return self
._streams
[self
._default
_stream
_name
]
This page took 0.043141 seconds and 5 git commands to generate.