bt2: Mass clock_value -> clock_snapshot rename
[babeltrace.git] / bindings / python / bt2 / bt2 / clock_class.py
CommitLineData
81447b5b
PP
1# The MIT License (MIT)
2#
f6a5e476 3# Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
81447b5b
PP
4#
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:
11#
12# The above copyright notice and this permission notice shall be included in
13# all copies or substantial portions of the Software.
14#
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
21# THE SOFTWARE.
22
23from bt2 import native_bt, object, utils
24import uuid as uuidp
f6a5e476 25import numbers
81447b5b 26import bt2
f192fc47 27import bt2.clock_snapshot as clock_snapshot
81447b5b 28
5c8b3186 29
81447b5b
PP
30class ClockClassOffset:
31 def __init__(self, seconds=0, cycles=0):
32 utils._check_int64(seconds)
33 utils._check_int64(cycles)
34 self._seconds = seconds
35 self._cycles = cycles
36
37 @property
38 def seconds(self):
39 return self._seconds
40
41 @property
42 def cycles(self):
43 return self._cycles
44
f6a5e476
PP
45 def __hash__(self):
46 return hash((self.seconds, self.cycles))
47
81447b5b
PP
48 def __eq__(self, other):
49 if not isinstance(other, self.__class__):
50 # not comparing apples to apples
51 return False
52
53 return (self.seconds, self.cycles) == (other.seconds, other.cycles)
54
55
56class ClockClass(object._Object):
f6a5e476 57 def __init__(self, name, frequency, description=None, precision=None,
81447b5b
PP
58 offset=None, is_absolute=None, uuid=None):
59 utils._check_str(name)
f6a5e476 60 utils._check_uint64(frequency)
839d52a5 61 ptr = native_bt.clock_class_create(name, frequency)
81447b5b
PP
62
63 if ptr is None:
64 raise bt2.CreationError('cannot create clock class object')
65
66 super().__init__(ptr)
67
68 if description is not None:
69 self.description = description
70
71 if frequency is not None:
72 self.frequency = frequency
73
74 if precision is not None:
75 self.precision = precision
76
77 if offset is not None:
78 self.offset = offset
79
80 if is_absolute is not None:
81 self.is_absolute = is_absolute
82
83 if uuid is not None:
84 self.uuid = uuid
85
86 def __eq__(self, other):
87 if type(self) is not type(other):
88 # not comparing apples to apples
89 return False
90
91 self_props = (
92 self.name,
93 self.description,
94 self.frequency,
95 self.precision,
96 self.offset,
97 self.is_absolute,
98 self.uuid
99 )
100 other_props = (
101 other.name,
102 other.description,
103 other.frequency,
104 other.precision,
105 other.offset,
106 other.is_absolute,
107 other.uuid
108 )
109 return self_props == other_props
110
111 def __copy__(self):
112 return ClockClass(name=self.name, description=self.description,
113 frequency=self.frequency, precision=self.precision,
114 offset=self.offset, is_absolute=self.is_absolute,
115 uuid=self.uuid)
116
117 def __deepcopy__(self, memo):
118 cpy = self.__copy__()
119 memo[id(self)] = cpy
120 return cpy
121
f6a5e476
PP
122 def __hash__(self):
123 return hash((
124 self.name,
125 self.description,
126 self.frequency,
127 self.precision,
128 self.offset.seconds,
129 self.offset.cycles,
130 self.is_absolute,
131 self.uuid))
132
81447b5b
PP
133 @property
134 def name(self):
839d52a5 135 name = native_bt.clock_class_get_name(self._ptr)
f6a5e476 136 assert(name is not None)
81447b5b
PP
137 return name
138
139 @name.setter
140 def name(self, name):
141 utils._check_str(name)
839d52a5 142 ret = native_bt.clock_class_set_name(self._ptr, name)
81447b5b
PP
143 utils._handle_ret(ret, "cannot set clock class object's name")
144
145 @property
146 def description(self):
839d52a5 147 return native_bt.clock_class_get_description(self._ptr)
81447b5b
PP
148
149 @description.setter
150 def description(self, description):
151 utils._check_str(description)
839d52a5 152 ret = native_bt.clock_class_set_description(self._ptr, description)
81447b5b
PP
153 utils._handle_ret(ret, "cannot set clock class object's description")
154
155 @property
156 def frequency(self):
839d52a5 157 frequency = native_bt.clock_class_get_frequency(self._ptr)
f6a5e476 158 assert(frequency >= 1)
81447b5b
PP
159 return frequency
160
161 @frequency.setter
162 def frequency(self, frequency):
163 utils._check_uint64(frequency)
839d52a5 164 ret = native_bt.clock_class_set_frequency(self._ptr, frequency)
81447b5b
PP
165 utils._handle_ret(ret, "cannot set clock class object's frequency")
166
167 @property
168 def precision(self):
839d52a5 169 precision = native_bt.clock_class_get_precision(self._ptr)
f6a5e476 170 assert(precision >= 0)
81447b5b
PP
171 return precision
172
173 @precision.setter
174 def precision(self, precision):
175 utils._check_uint64(precision)
839d52a5 176 ret = native_bt.clock_class_set_precision(self._ptr, precision)
81447b5b
PP
177 utils._handle_ret(ret, "cannot set clock class object's precision")
178
179 @property
180 def offset(self):
839d52a5 181 ret, offset_s = native_bt.clock_class_get_offset_s(self._ptr)
f6a5e476 182 assert(ret == 0)
839d52a5 183 ret, offset_cycles = native_bt.clock_class_get_offset_cycles(self._ptr)
f6a5e476 184 assert(ret == 0)
81447b5b
PP
185 return ClockClassOffset(offset_s, offset_cycles)
186
187 @offset.setter
188 def offset(self, offset):
189 utils._check_type(offset, ClockClassOffset)
839d52a5 190 ret = native_bt.clock_class_set_offset_s(self._ptr, offset.seconds)
81447b5b 191 utils._handle_ret(ret, "cannot set clock class object's offset (seconds)")
839d52a5 192 ret = native_bt.clock_class_set_offset_cycles(self._ptr, offset.cycles)
81447b5b
PP
193 utils._handle_ret(ret, "cannot set clock class object's offset (cycles)")
194
195 @property
196 def is_absolute(self):
839d52a5 197 is_absolute = native_bt.clock_class_is_absolute(self._ptr)
f6a5e476 198 assert(is_absolute >= 0)
81447b5b
PP
199 return is_absolute > 0
200
201 @is_absolute.setter
202 def is_absolute(self, is_absolute):
203 utils._check_bool(is_absolute)
839d52a5 204 ret = native_bt.clock_class_set_is_absolute(self._ptr, int(is_absolute))
81447b5b
PP
205 utils._handle_ret(ret, "cannot set clock class object's absoluteness")
206
207 @property
208 def uuid(self):
839d52a5 209 uuid_bytes = native_bt.clock_class_get_uuid(self._ptr)
81447b5b
PP
210
211 if uuid_bytes is None:
f6a5e476 212 return
81447b5b
PP
213
214 return uuidp.UUID(bytes=uuid_bytes)
215
216 @uuid.setter
217 def uuid(self, uuid):
218 utils._check_type(uuid, uuidp.UUID)
839d52a5 219 ret = native_bt.clock_class_set_uuid(self._ptr, uuid.bytes)
81447b5b
PP
220 utils._handle_ret(ret, "cannot set clock class object's UUID")
221
f6a5e476 222 def __call__(self, cycles):
f192fc47 223 return clock_snapshot._ClockSnapshot(self._ptr, cycles)
This page took 0.043778 seconds and 4 git commands to generate.