babeltrace2 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/babeltrace2.gemspec +13 -0
- data/lib/babeltrace2.rb +49 -0
- data/lib/babeltrace2/error-reporting.rb +432 -0
- data/lib/babeltrace2/func-status.rb +26 -0
- data/lib/babeltrace2/graph/component-class-dev.rb +801 -0
- data/lib/babeltrace2/graph/component-class.rb +134 -0
- data/lib/babeltrace2/graph/component-descriptor-set.rb +78 -0
- data/lib/babeltrace2/graph/component.rb +362 -0
- data/lib/babeltrace2/graph/connection.rb +35 -0
- data/lib/babeltrace2/graph/graph.rb +523 -0
- data/lib/babeltrace2/graph/interrupter.rb +57 -0
- data/lib/babeltrace2/graph/message-iterator-class.rb +374 -0
- data/lib/babeltrace2/graph/message-iterator.rb +253 -0
- data/lib/babeltrace2/graph/message.rb +721 -0
- data/lib/babeltrace2/graph/port.rb +124 -0
- data/lib/babeltrace2/graph/private-query-executor.rb +4 -0
- data/lib/babeltrace2/graph/query-executor.rb +142 -0
- data/lib/babeltrace2/graph/self-component-class.rb +37 -0
- data/lib/babeltrace2/graph/self-component-port.rb +35 -0
- data/lib/babeltrace2/graph/self-component.rb +264 -0
- data/lib/babeltrace2/graph/self-message-iterator.rb +147 -0
- data/lib/babeltrace2/integer-range-set.rb +275 -0
- data/lib/babeltrace2/logging-defs.rb +19 -0
- data/lib/babeltrace2/logging.rb +77 -0
- data/lib/babeltrace2/plugin/plugin-dev.rb +335 -0
- data/lib/babeltrace2/plugin/plugin-loading.rb +459 -0
- data/lib/babeltrace2/trace-ir/clock-class.rb +258 -0
- data/lib/babeltrace2/trace-ir/clock-snapshot.rb +45 -0
- data/lib/babeltrace2/trace-ir/event-class.rb +292 -0
- data/lib/babeltrace2/trace-ir/event.rb +91 -0
- data/lib/babeltrace2/trace-ir/field-class.rb +1416 -0
- data/lib/babeltrace2/trace-ir/field-path.rb +123 -0
- data/lib/babeltrace2/trace-ir/field.rb +871 -0
- data/lib/babeltrace2/trace-ir/packet.rb +57 -0
- data/lib/babeltrace2/trace-ir/stream-class.rb +425 -0
- data/lib/babeltrace2/trace-ir/stream.rb +137 -0
- data/lib/babeltrace2/trace-ir/trace-class.rb +343 -0
- data/lib/babeltrace2/trace-ir/trace.rb +321 -0
- data/lib/babeltrace2/types.rb +667 -0
- data/lib/babeltrace2/util.rb +23 -0
- data/lib/babeltrace2/value.rb +869 -0
- data/lib/babeltrace2/version.rb +126 -0
- metadata +105 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
module Babeltrace2
|
2
|
+
BT_FIELD_PATH_SCOPE_PACKET_CONTEXT = 0
|
3
|
+
BT_FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT = 1
|
4
|
+
BT_FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT = 2
|
5
|
+
BT_FIELD_PATH_SCOPE_EVENT_PAYLOAD = 3
|
6
|
+
BTFieldPathScope = enum :bt_field_path_scope,
|
7
|
+
[ :BT_FIELD_PATH_SCOPE_PACKET_CONTEXT,
|
8
|
+
BT_FIELD_PATH_SCOPE_PACKET_CONTEXT,
|
9
|
+
:BT_FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT,
|
10
|
+
BT_FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT,
|
11
|
+
:BT_FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT,
|
12
|
+
BT_FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT,
|
13
|
+
:BT_FIELD_PATH_SCOPE_EVENT_PAYLOAD,
|
14
|
+
BT_FIELD_PATH_SCOPE_EVENT_PAYLOAD ]
|
15
|
+
|
16
|
+
attach_function :bt_field_path_get_root_scope,
|
17
|
+
[ :bt_field_path_handle ],
|
18
|
+
:bt_field_path_scope
|
19
|
+
|
20
|
+
attach_function :bt_field_path_get_item_count,
|
21
|
+
[ :bt_field_path_handle ],
|
22
|
+
:uint64
|
23
|
+
|
24
|
+
attach_function :bt_field_path_borrow_item_by_index_const,
|
25
|
+
[ :bt_field_path_handle, :uint64 ],
|
26
|
+
:bt_field_path_item_handle
|
27
|
+
|
28
|
+
attach_function :bt_field_path_get_ref,
|
29
|
+
[ :bt_field_path_handle ],
|
30
|
+
:void
|
31
|
+
|
32
|
+
attach_function :bt_field_path_put_ref,
|
33
|
+
[ :bt_field_path_handle ],
|
34
|
+
:void
|
35
|
+
|
36
|
+
class BTFieldPath < BTSharedObject
|
37
|
+
Scope = BTFieldPathScope
|
38
|
+
@get_ref = :bt_field_path_get_ref
|
39
|
+
@put_ref = :bt_field_path_put_ref
|
40
|
+
def initialize(handle, retain: true, auto_release: true)
|
41
|
+
super(handle, retain: retain, auto_release: auto_release)
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_root_scope
|
45
|
+
Babeltrace2.bt_field_path_get_root_scope(@handle)
|
46
|
+
end
|
47
|
+
alias root_scope get_root_scope
|
48
|
+
|
49
|
+
def get_item_count
|
50
|
+
@item_count ||= Babeltrace2.bt_field_path_get_item_count(@handle)
|
51
|
+
end
|
52
|
+
alias item_count get_item_count
|
53
|
+
alias size get_item_count
|
54
|
+
|
55
|
+
def get_item_by_index(index)
|
56
|
+
index = get_item_count + index if index < 0
|
57
|
+
return nil if index >= get_item_count || index < 0
|
58
|
+
BTFieldPathItem.new(
|
59
|
+
Babeltrace2.bt_field_path_borrow_item_by_index_const(@handle, index))
|
60
|
+
end
|
61
|
+
alias [] get_item_by_index
|
62
|
+
|
63
|
+
def each
|
64
|
+
if block_given?
|
65
|
+
get_item_count.times { |i|
|
66
|
+
yield get_item_by_index(i)
|
67
|
+
}
|
68
|
+
else
|
69
|
+
to_enum(:each)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_s
|
74
|
+
path = ""
|
75
|
+
path << root_scope.to_s.sub("BT_FIELD_PATH_SCOPE_","")
|
76
|
+
each { |e|
|
77
|
+
case e.type
|
78
|
+
when :BT_FIELD_PATH_ITEM_TYPE_INDEX
|
79
|
+
path << "[#{e.index}]"
|
80
|
+
when :BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT
|
81
|
+
path << "->"
|
82
|
+
when :BT_FIELD_PATH_ITEM_TYPE_CURRENT_OPTION_CONTENT
|
83
|
+
path << "=>"
|
84
|
+
end
|
85
|
+
}
|
86
|
+
path
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
BT_FIELD_PATH_ITEM_TYPE_INDEX = 1 << 0
|
91
|
+
BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT = 1 << 1
|
92
|
+
BT_FIELD_PATH_ITEM_TYPE_CURRENT_OPTION_CONTENT = 1 << 2
|
93
|
+
BTFieldPathItemType = enum :bt_field_path_item_type,
|
94
|
+
[ :BT_FIELD_PATH_ITEM_TYPE_INDEX,
|
95
|
+
BT_FIELD_PATH_ITEM_TYPE_INDEX,
|
96
|
+
:BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT,
|
97
|
+
BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT,
|
98
|
+
:BT_FIELD_PATH_ITEM_TYPE_CURRENT_OPTION_CONTENT,
|
99
|
+
BT_FIELD_PATH_ITEM_TYPE_CURRENT_OPTION_CONTENT ]
|
100
|
+
|
101
|
+
attach_function :bt_field_path_item_get_type,
|
102
|
+
[ :bt_field_path_item_handle ],
|
103
|
+
:bt_field_path_item_type
|
104
|
+
|
105
|
+
attach_function :bt_field_path_item_index_get_index,
|
106
|
+
[ :bt_field_path_item_handle ],
|
107
|
+
:uint64
|
108
|
+
|
109
|
+
class BTFieldPath::Item < BTObject
|
110
|
+
Type = BTFieldPathItemType
|
111
|
+
|
112
|
+
def get_type
|
113
|
+
Babeltrace2.bt_field_path_item_get_type(@handle)
|
114
|
+
end
|
115
|
+
alias type get_type
|
116
|
+
|
117
|
+
def get_index
|
118
|
+
Babeltrace2.bt_field_path_item_index_get_index(@handle)
|
119
|
+
end
|
120
|
+
alias index get_index
|
121
|
+
end
|
122
|
+
BTFieldPathItem = BTFieldPath::Item
|
123
|
+
end
|
@@ -0,0 +1,871 @@
|
|
1
|
+
module Babeltrace2
|
2
|
+
attach_function :bt_field_get_class_type,
|
3
|
+
[ :bt_field_handle ],
|
4
|
+
:bt_field_class_type
|
5
|
+
|
6
|
+
attach_function :bt_field_borrow_class,
|
7
|
+
[ :bt_field_handle ],
|
8
|
+
:bt_field_class_handle
|
9
|
+
|
10
|
+
attach_function :bt_field_borrow_class_const,
|
11
|
+
[ :bt_field_handle ],
|
12
|
+
:bt_field_class_handle
|
13
|
+
|
14
|
+
class BTField < BTObject
|
15
|
+
TYPE_MAP = {}
|
16
|
+
|
17
|
+
def self.from_handle(handle)
|
18
|
+
clss = TYPE_MAP[Babeltrace2.bt_field_get_class_type(handle)]
|
19
|
+
raise "unsupported field class type" unless clss
|
20
|
+
handle = clss[0].new(handle)
|
21
|
+
clss[1].new(handle)
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_class_type
|
25
|
+
Babeltrace2.bt_field_get_class_type(@handle)
|
26
|
+
end
|
27
|
+
alias class_type get_class_type
|
28
|
+
|
29
|
+
def get_class
|
30
|
+
@class ||= BTFieldClass.from_handle(Babeltrace2.bt_field_borrow_class(@handle))
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
value.to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
attach_function :bt_field_bool_set_value,
|
39
|
+
[ :bt_field_bool_handle, :bt_bool ],
|
40
|
+
:void
|
41
|
+
|
42
|
+
attach_function :bt_field_bool_get_value,
|
43
|
+
[ :bt_field_bool_handle ],
|
44
|
+
:bt_bool
|
45
|
+
|
46
|
+
class BTField::Bool < BTField
|
47
|
+
def set_value(value)
|
48
|
+
Babeltrace2.bt_field_bool_set_value(@handle, value ? BT_TRUE : BT_FALSE)
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def value=(value)
|
53
|
+
set_value(value)
|
54
|
+
value
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_value
|
58
|
+
Babeltrace2.bt_field_bool_get_value(@handle) != BT_FALSE
|
59
|
+
end
|
60
|
+
alias value get_value
|
61
|
+
end
|
62
|
+
BTFieldBool = BTField::Bool
|
63
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_BOOL] = [
|
64
|
+
BTFieldBoolHandle,
|
65
|
+
BTFieldBool ]
|
66
|
+
|
67
|
+
attach_function :bt_field_bit_array_set_value_as_integer,
|
68
|
+
[ :bt_field_bit_array_handle, :uint64 ],
|
69
|
+
:void
|
70
|
+
|
71
|
+
attach_function :bt_field_bit_array_get_value_as_integer,
|
72
|
+
[ :bt_field_bit_array_handle ],
|
73
|
+
:uint64
|
74
|
+
|
75
|
+
class BTField::BitArray < BTField
|
76
|
+
def set_value_as_integer(bits)
|
77
|
+
Babeltrace2.bt_field_bit_array_set_value_as_integer(@handle, bits)
|
78
|
+
self
|
79
|
+
end
|
80
|
+
|
81
|
+
def value_as_integer=(bits)
|
82
|
+
set_value_as_integer(bits)
|
83
|
+
bits
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_value_as_integer
|
87
|
+
Babeltrace2.bt_field_bit_array_get_value_as_integer(@handle)
|
88
|
+
end
|
89
|
+
alias value_as_integer get_value_as_integer
|
90
|
+
|
91
|
+
def get_length
|
92
|
+
@length ||= get_class.get_length
|
93
|
+
end
|
94
|
+
alias length get_length
|
95
|
+
|
96
|
+
def [](position)
|
97
|
+
length = get_length
|
98
|
+
position += length if position < 0
|
99
|
+
raise "invalid position" if position >= length || position < 0
|
100
|
+
get_value_as_integer[position] != 0
|
101
|
+
end
|
102
|
+
|
103
|
+
def []=(position, bool)
|
104
|
+
length = get_length
|
105
|
+
position += length if position < 0
|
106
|
+
raise "invalid position" if position >= length || position < 0
|
107
|
+
v = get_value_as_integer
|
108
|
+
if bool then v |= (1 << position) else v &= ~(1 << position) end
|
109
|
+
set_value_as_integer(v)
|
110
|
+
bool
|
111
|
+
end
|
112
|
+
|
113
|
+
def each
|
114
|
+
if block_given?
|
115
|
+
length.times { |i|
|
116
|
+
yield self[i]
|
117
|
+
}
|
118
|
+
else
|
119
|
+
to_enum(:each)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def value
|
124
|
+
get_length.times.collect { |i| self[i] }
|
125
|
+
end
|
126
|
+
|
127
|
+
def to_s
|
128
|
+
s = "["
|
129
|
+
s << get_length.times.collect { |i| self[i] }.join(", ")
|
130
|
+
s << "]"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
BTFieldBitArray = BTField::BitArray
|
134
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_BIT_ARRAY] = [
|
135
|
+
BTFieldBitArrayHandle,
|
136
|
+
BTFieldBitArray ]
|
137
|
+
|
138
|
+
class BTField::Integer < BTField
|
139
|
+
def get_field_value_range
|
140
|
+
@field_value_range ||= get_class.get_field_value_range
|
141
|
+
end
|
142
|
+
alias field_value_range get_field_value_range
|
143
|
+
|
144
|
+
def get_preferred_display_base
|
145
|
+
@preferred_display_base ||= get_class.get_preferred_display_base
|
146
|
+
end
|
147
|
+
alias preferred_display_base get_preferred_display_base
|
148
|
+
end
|
149
|
+
BTFieldInteger = BTField::Integer
|
150
|
+
|
151
|
+
attach_function :bt_field_integer_unsigned_set_value,
|
152
|
+
[ :bt_field_integer_unsigned_handle, :uint64 ],
|
153
|
+
:void
|
154
|
+
|
155
|
+
attach_function :bt_field_integer_unsigned_get_value,
|
156
|
+
[ :bt_field_integer_unsigned_handle ],
|
157
|
+
:uint64
|
158
|
+
|
159
|
+
class BTField::Integer::Unsigned < BTField::Integer
|
160
|
+
def set_value(value)
|
161
|
+
raise "invalid range" if (1 << get_field_value_range) - 1 < value || value < 0
|
162
|
+
Babeltrace2.bt_field_integer_unsigned_set_value(@handle, value)
|
163
|
+
self
|
164
|
+
end
|
165
|
+
|
166
|
+
def value=(value)
|
167
|
+
set_value(value)
|
168
|
+
value
|
169
|
+
end
|
170
|
+
|
171
|
+
def get_value
|
172
|
+
Babeltrace2.bt_field_integer_unsigned_get_value(@handle)
|
173
|
+
end
|
174
|
+
alias value get_value
|
175
|
+
|
176
|
+
def to_s
|
177
|
+
v = get_value
|
178
|
+
case preferred_display_base
|
179
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_BINARY
|
180
|
+
"0b#{v.to_s(2)}"
|
181
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL
|
182
|
+
"0#{v.to_s(8)}"
|
183
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL
|
184
|
+
v.to_s
|
185
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_HEXADECIMAL
|
186
|
+
"0x#{v.to_s(16)}"
|
187
|
+
else
|
188
|
+
raise "invalid preffered display base"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
BTFieldIntegerUnsigned = BTField::Integer::Unsigned
|
193
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER] = [
|
194
|
+
BTFieldIntegerUnsignedHandle,
|
195
|
+
BTFieldIntegerUnsigned ]
|
196
|
+
|
197
|
+
attach_function :bt_field_integer_signed_set_value,
|
198
|
+
[ :bt_field_integer_signed_handle, :int64 ],
|
199
|
+
:void
|
200
|
+
|
201
|
+
attach_function :bt_field_integer_signed_get_value,
|
202
|
+
[ :bt_field_integer_signed_handle ],
|
203
|
+
:int64
|
204
|
+
|
205
|
+
class BTField::Integer::Signed < BTField::Integer
|
206
|
+
def set_value(value)
|
207
|
+
range = get_field_value_range
|
208
|
+
raise "invalid range" if (1 << (range-1)) - 1 < value || value < -(1 << (range-1))
|
209
|
+
Babeltrace2.bt_field_integer_signed_set_value(@handle, value)
|
210
|
+
self
|
211
|
+
end
|
212
|
+
|
213
|
+
def value=(value)
|
214
|
+
set_value(value)
|
215
|
+
value
|
216
|
+
end
|
217
|
+
|
218
|
+
def get_value
|
219
|
+
Babeltrace2.bt_field_integer_signed_get_value(@handle)
|
220
|
+
end
|
221
|
+
alias value get_value
|
222
|
+
|
223
|
+
def get_twos_complement(v)
|
224
|
+
(((1 << get_field_value_range) -1) ^ -v) + 1
|
225
|
+
end
|
226
|
+
private :get_twos_complement
|
227
|
+
|
228
|
+
def to_s
|
229
|
+
v = get_value
|
230
|
+
case preferred_display_base
|
231
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_BINARY
|
232
|
+
"0b#{(v < 0 ? get_twos_complement(v) : v).to_s(2)}"
|
233
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL
|
234
|
+
"0#{(v < 0 ? get_twos_complement(v) : v).to_s(8)}"
|
235
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL
|
236
|
+
v.to_s
|
237
|
+
when :BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_HEXADECIMAL
|
238
|
+
"0x#{(v < 0 ? get_twos_complement(v) : v).to_s(16)}"
|
239
|
+
else
|
240
|
+
raise "invalid preffered display base"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
BTFieldIntegerSigned = BTField::Integer::Signed
|
245
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_SIGNED_INTEGER] = [
|
246
|
+
BTFieldIntegerSignedHandle,
|
247
|
+
BTFieldIntegerSigned ]
|
248
|
+
|
249
|
+
BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_OK = BT_FUNC_STATUS_OK
|
250
|
+
BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
|
251
|
+
BTFieldEnumerationGetMappingLabelsStatus =
|
252
|
+
enum :bt_field_enumeration_get_mapping_labels_status,
|
253
|
+
[ :BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_OK,
|
254
|
+
BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_OK,
|
255
|
+
:BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_MEMORY_ERROR,
|
256
|
+
BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_MEMORY_ERROR ]
|
257
|
+
|
258
|
+
module BTField::Enumeration
|
259
|
+
GetMappingLabelsStatus = BTFieldEnumerationGetMappingLabelsStatus
|
260
|
+
|
261
|
+
def to_s
|
262
|
+
s = "(#{value}) ["
|
263
|
+
s << mapping_labels.collect { |l| l.kind_of?(Symbol) ? l.inspect : l } .join(", ")
|
264
|
+
s << "]"
|
265
|
+
end
|
266
|
+
end
|
267
|
+
BTFieldEnumeration = BTField::Enumeration
|
268
|
+
|
269
|
+
attach_function :bt_field_enumeration_unsigned_get_mapping_labels,
|
270
|
+
[ :bt_field_enumeration_unsigned_handle,
|
271
|
+
:pointer, :pointer ],
|
272
|
+
:bt_field_enumeration_get_mapping_labels_status
|
273
|
+
|
274
|
+
class BTField::Enumeration::Unsigned < BTField::Integer::Unsigned
|
275
|
+
include BTField::Enumeration
|
276
|
+
def get_mapping_labels
|
277
|
+
ptr1 = FFI::MemoryPointer.new(:pointer)
|
278
|
+
ptr2 = FFI::MemoryPointer.new(:uint64)
|
279
|
+
res = Babeltrace2.bt_field_enumeration_unsigned_get_mapping_labels(
|
280
|
+
@handle, ptr1, ptr2)
|
281
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_OK
|
282
|
+
count = ptr2.read_uint64
|
283
|
+
return [] if count == 0
|
284
|
+
ptr1 = ptr1.read_pointer
|
285
|
+
ptr1.read_array_of_pointer(count).collect.collect { |v|
|
286
|
+
v = v.read_string
|
287
|
+
v[0] == ':' ? v[1..-1].to_sym : v
|
288
|
+
}
|
289
|
+
end
|
290
|
+
alias mapping_labels get_mapping_labels
|
291
|
+
end
|
292
|
+
BTFieldEnumerationUnsigned = BTField::Enumeration::Unsigned
|
293
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION] = [
|
294
|
+
BTFieldEnumerationUnsignedHandle,
|
295
|
+
BTFieldEnumerationUnsigned ]
|
296
|
+
|
297
|
+
attach_function :bt_field_enumeration_signed_get_mapping_labels,
|
298
|
+
[ :bt_field_enumeration_signed_handle,
|
299
|
+
:pointer, :pointer ],
|
300
|
+
:bt_field_enumeration_get_mapping_labels_status
|
301
|
+
|
302
|
+
class BTField::Enumeration::Signed < BTField::Integer::Signed
|
303
|
+
include BTField::Enumeration
|
304
|
+
def get_mapping_labels
|
305
|
+
ptr1 = FFI::MemoryPointer.new(:pointer)
|
306
|
+
ptr2 = FFI::MemoryPointer.new(:uint64)
|
307
|
+
res = Babeltrace2.bt_field_enumeration_signed_get_mapping_labels(
|
308
|
+
@handle, ptr1, ptr2)
|
309
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_ENUMERATION_GET_MAPPING_LABELS_STATUS_OK
|
310
|
+
count = ptr2.read_uint64
|
311
|
+
return [] if count == 0
|
312
|
+
ptr1 = ptr1.read_pointer
|
313
|
+
ptr1.read_array_of_pointer(count).collect.collect { |v|
|
314
|
+
v = v.read_string
|
315
|
+
v[0] == ':' ? v[1..-1].to_sym : v
|
316
|
+
}
|
317
|
+
end
|
318
|
+
alias mapping_labels get_mapping_labels
|
319
|
+
end
|
320
|
+
BTFieldEnumerationSigned = BTField::Enumeration::Signed
|
321
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION] = [
|
322
|
+
BTFieldEnumerationSignedHandle,
|
323
|
+
BTFieldEnumerationSigned ]
|
324
|
+
|
325
|
+
class BTField::Real < BTField
|
326
|
+
end
|
327
|
+
BTFieldReal = BTField::Real
|
328
|
+
|
329
|
+
attach_function :bt_field_real_single_precision_set_value,
|
330
|
+
[ :bt_field_real_single_precision_handle, :float ],
|
331
|
+
:void
|
332
|
+
|
333
|
+
attach_function :bt_field_real_single_precision_get_value,
|
334
|
+
[ :bt_field_real_single_precision_handle ],
|
335
|
+
:float
|
336
|
+
|
337
|
+
class BTField::Real::SinglePrecision < BTField::Real
|
338
|
+
def set_value(value)
|
339
|
+
Babeltrace2.bt_field_real_single_precision_set_value(@handle, value)
|
340
|
+
self
|
341
|
+
end
|
342
|
+
|
343
|
+
def value=(value)
|
344
|
+
set_value(value)
|
345
|
+
value
|
346
|
+
end
|
347
|
+
|
348
|
+
def get_value
|
349
|
+
Babeltrace2.bt_field_real_single_precision_get_value(@handle)
|
350
|
+
end
|
351
|
+
alias value get_value
|
352
|
+
end
|
353
|
+
BTFieldRealSinglePrecision = BTField::Real::SinglePrecision
|
354
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL] = [
|
355
|
+
BTFieldRealSinglePrecisionHandle,
|
356
|
+
BTFieldRealSinglePrecision ]
|
357
|
+
|
358
|
+
attach_function :bt_field_real_double_precision_set_value,
|
359
|
+
[ :bt_field_real_double_precision_handle, :double ],
|
360
|
+
:void
|
361
|
+
|
362
|
+
attach_function :bt_field_real_double_precision_get_value,
|
363
|
+
[ :bt_field_real_double_precision_handle ],
|
364
|
+
:double
|
365
|
+
|
366
|
+
class BTField::Real::DoublePrecision < BTField::Real
|
367
|
+
def set_value(value)
|
368
|
+
Babeltrace2.bt_field_real_double_precision_set_value(@handle, value)
|
369
|
+
self
|
370
|
+
end
|
371
|
+
|
372
|
+
def value=(value)
|
373
|
+
set_value(value)
|
374
|
+
value
|
375
|
+
end
|
376
|
+
|
377
|
+
def get_value
|
378
|
+
Babeltrace2.bt_field_real_double_precision_get_value(@handle)
|
379
|
+
end
|
380
|
+
alias value get_value
|
381
|
+
end
|
382
|
+
BTFieldRealDoublePrecision = BTField::Real::DoublePrecision
|
383
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL] = [
|
384
|
+
BTFieldRealDoublePrecisionHandle,
|
385
|
+
BTFieldRealDoublePrecision ]
|
386
|
+
|
387
|
+
BT_FIELD_STRING_SET_VALUE_STATUS_OK = BT_FUNC_STATUS_OK
|
388
|
+
BT_FIELD_STRING_SET_VALUE_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
|
389
|
+
BTFieldStringSetValueStatus = enum :bt_field_string_set_value_status,
|
390
|
+
[ :BT_FIELD_STRING_SET_VALUE_STATUS_OK,
|
391
|
+
BT_FIELD_STRING_SET_VALUE_STATUS_OK,
|
392
|
+
:BT_FIELD_STRING_SET_VALUE_STATUS_MEMORY_ERROR,
|
393
|
+
BT_FIELD_STRING_SET_VALUE_STATUS_MEMORY_ERROR ]
|
394
|
+
|
395
|
+
attach_function :bt_field_string_set_value,
|
396
|
+
[ :bt_field_string_handle, :string ],
|
397
|
+
:bt_field_string_set_value_status
|
398
|
+
|
399
|
+
attach_function :bt_field_string_get_length,
|
400
|
+
[ :bt_field_string_handle ],
|
401
|
+
:uint64
|
402
|
+
|
403
|
+
attach_function :bt_field_string_get_value,
|
404
|
+
[ :bt_field_string_handle ],
|
405
|
+
:string
|
406
|
+
|
407
|
+
attach_function :bt_field_string_get_value_ptr, :bt_field_string_get_value,
|
408
|
+
[ :bt_field_string_handle ],
|
409
|
+
:pointer
|
410
|
+
|
411
|
+
BT_FIELD_STRING_APPEND_STATUS_OK = BT_FUNC_STATUS_OK
|
412
|
+
BT_FIELD_STRING_APPEND_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
|
413
|
+
BTFieldStringAppendStatus = enum :bt_field_string_append_status,
|
414
|
+
[ :BT_FIELD_STRING_APPEND_STATUS_OK,
|
415
|
+
BT_FIELD_STRING_APPEND_STATUS_OK,
|
416
|
+
:BT_FIELD_STRING_APPEND_STATUS_MEMORY_ERROR,
|
417
|
+
BT_FIELD_STRING_APPEND_STATUS_MEMORY_ERROR ]
|
418
|
+
|
419
|
+
attach_function :bt_field_string_append,
|
420
|
+
[ :bt_field_string_handle, :string ],
|
421
|
+
:bt_field_string_append_status
|
422
|
+
|
423
|
+
attach_function :bt_field_string_append_with_length,
|
424
|
+
[ :bt_field_string_handle, :string, :uint64 ],
|
425
|
+
:bt_field_string_append_status
|
426
|
+
|
427
|
+
attach_function :bt_field_string_clear,
|
428
|
+
[ :bt_field_string_handle ],
|
429
|
+
:void
|
430
|
+
|
431
|
+
class BTField::String < BTField
|
432
|
+
SetValueStatus = BTFieldStringSetValueStatus
|
433
|
+
AppendStatus = BTFieldStringAppendStatus
|
434
|
+
def set_value(value)
|
435
|
+
res = Babeltrace2.bt_field_string_set_value(@handle, value)
|
436
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_STRING_SET_VALUE_STATUS_OK
|
437
|
+
self
|
438
|
+
end
|
439
|
+
|
440
|
+
def value=(value)
|
441
|
+
set_value(value)
|
442
|
+
value
|
443
|
+
end
|
444
|
+
|
445
|
+
def get_length
|
446
|
+
Babeltrace2.bt_field_string_get_length(@handle)
|
447
|
+
end
|
448
|
+
alias length get_length
|
449
|
+
|
450
|
+
def get_value
|
451
|
+
Babeltrace2.bt_field_string_get_value_ptr(@handle).read_string(length)
|
452
|
+
end
|
453
|
+
alias value get_value
|
454
|
+
alias to_s get_value
|
455
|
+
|
456
|
+
def get_raw_value
|
457
|
+
Babeltrace2.bt_field_string_get_value_ptr(@handle).slice(0, get_length)
|
458
|
+
end
|
459
|
+
alias raw_value get_raw_value
|
460
|
+
|
461
|
+
def append(value, length: nil)
|
462
|
+
res = if length
|
463
|
+
Babeltrace2.bt_field_string_append_with_length(@handle, value, length)
|
464
|
+
else
|
465
|
+
Babeltrace2.bt_field_string_append(@handle, value)
|
466
|
+
end
|
467
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_STRING_APPEND_STATUS_OK
|
468
|
+
self
|
469
|
+
end
|
470
|
+
|
471
|
+
def <<(value)
|
472
|
+
append(value)
|
473
|
+
end
|
474
|
+
|
475
|
+
def clear
|
476
|
+
Babeltrace2.bt_field_string_clear(@handle)
|
477
|
+
self
|
478
|
+
end
|
479
|
+
alias clear! clear
|
480
|
+
end
|
481
|
+
BTFieldString = BTField::String
|
482
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_STRING] = [
|
483
|
+
BTFieldStringHandle,
|
484
|
+
BTFieldString ]
|
485
|
+
|
486
|
+
attach_function :bt_field_array_get_length,
|
487
|
+
[ :bt_field_array_handle ],
|
488
|
+
:uint64
|
489
|
+
|
490
|
+
attach_function :bt_field_array_borrow_element_field_by_index,
|
491
|
+
[ :bt_field_array_handle, :uint64 ],
|
492
|
+
:bt_field_handle
|
493
|
+
|
494
|
+
attach_function :bt_field_array_borrow_element_field_by_index_const,
|
495
|
+
[ :bt_field_array_handle, :uint64 ],
|
496
|
+
:bt_field_handle
|
497
|
+
|
498
|
+
class BTField::Array < BTField
|
499
|
+
def get_length
|
500
|
+
Babeltrace2.bt_field_array_get_length(@handle)
|
501
|
+
end
|
502
|
+
alias length get_length
|
503
|
+
|
504
|
+
def get_element_field_by_index(index)
|
505
|
+
length = get_length
|
506
|
+
index += length if index < 0
|
507
|
+
return nil if index >= length || index < 0
|
508
|
+
BTField.from_handle(
|
509
|
+
Babeltrace2.bt_field_array_borrow_element_field_by_index(@handle, index))
|
510
|
+
end
|
511
|
+
alias [] get_element_field_by_index
|
512
|
+
|
513
|
+
def each
|
514
|
+
if block_given?
|
515
|
+
get_length.times { |index|
|
516
|
+
yield get_element_field_by_index(index)
|
517
|
+
}
|
518
|
+
else
|
519
|
+
to_enum(:each)
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
523
|
+
def value
|
524
|
+
each.collect { |e| e.value }
|
525
|
+
end
|
526
|
+
|
527
|
+
def to_s
|
528
|
+
s = "["
|
529
|
+
s << each.collect { |e| e.to_s }.join(", ")
|
530
|
+
s << "]"
|
531
|
+
end
|
532
|
+
end
|
533
|
+
BTFieldArray = BTField::Array
|
534
|
+
|
535
|
+
class BTField::Array::Static < BTField::Array
|
536
|
+
def get_length
|
537
|
+
@length ||= super
|
538
|
+
end
|
539
|
+
end
|
540
|
+
BTFieldArrayStatic = BTField::Array::Static
|
541
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_STATIC_ARRAY] = [
|
542
|
+
BTFieldArrayStaticHandle,
|
543
|
+
BTFieldArrayStatic ]
|
544
|
+
|
545
|
+
BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_OK = BT_FUNC_STATUS_OK
|
546
|
+
BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
|
547
|
+
BTFieldArrayDynamicSetLengthStatus =
|
548
|
+
enum :bt_field_array_dynamic_set_length_status,
|
549
|
+
[ :BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_OK,
|
550
|
+
BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_OK,
|
551
|
+
:BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_MEMORY_ERROR,
|
552
|
+
BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_MEMORY_ERROR ]
|
553
|
+
|
554
|
+
attach_function :bt_field_array_dynamic_set_length,
|
555
|
+
[ :bt_field_array_dynamic_handle, :uint64 ],
|
556
|
+
:bt_field_array_dynamic_set_length_status
|
557
|
+
|
558
|
+
class BTField::Array::Dynamic < BTField::Array
|
559
|
+
module WithLengthField
|
560
|
+
end
|
561
|
+
SetLengthStatus = BTFieldArrayDynamicSetLengthStatus
|
562
|
+
|
563
|
+
def initialize(handle)
|
564
|
+
super
|
565
|
+
extend(BTFieldArrayDynamicWithLengthField) if class_type ==:BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD
|
566
|
+
end
|
567
|
+
|
568
|
+
def set_length(length)
|
569
|
+
res = Babeltrace2.bt_field_array_dynamic_set_length(@handle, length)
|
570
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_DYNAMIC_ARRAY_SET_LENGTH_STATUS_OK
|
571
|
+
self
|
572
|
+
end
|
573
|
+
|
574
|
+
def length=(length)
|
575
|
+
set_length(length)
|
576
|
+
length
|
577
|
+
end
|
578
|
+
end
|
579
|
+
BTFieldArrayDynamicWithLengthField = BTField::Array::Dynamic::WithLengthField
|
580
|
+
BTFieldArrayDynamic = BTField::Array::Dynamic
|
581
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD] = [
|
582
|
+
BTFieldArrayDynamicHandle,
|
583
|
+
BTFieldArrayDynamic ]
|
584
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD] = [
|
585
|
+
BTFieldArrayDynamicHandle,
|
586
|
+
BTFieldArrayDynamic ]
|
587
|
+
|
588
|
+
attach_function :bt_field_structure_borrow_member_field_by_index,
|
589
|
+
[ :bt_field_structure_handle, :uint64 ],
|
590
|
+
:bt_field_handle
|
591
|
+
|
592
|
+
attach_function :bt_field_structure_borrow_member_field_by_index_const,
|
593
|
+
[ :bt_field_structure_handle, :uint64 ],
|
594
|
+
:bt_field_handle
|
595
|
+
|
596
|
+
attach_function :bt_field_structure_borrow_member_field_by_name,
|
597
|
+
[ :bt_field_structure_handle, :string ],
|
598
|
+
:bt_field_handle
|
599
|
+
|
600
|
+
attach_function :bt_field_structure_borrow_member_field_by_name_const,
|
601
|
+
[ :bt_field_structure_handle, :string ],
|
602
|
+
:bt_field_handle
|
603
|
+
|
604
|
+
class BTField::Structure < BTField
|
605
|
+
def get_member_count
|
606
|
+
@member_count ||= get_class.get_member_count
|
607
|
+
end
|
608
|
+
alias member_count get_member_count
|
609
|
+
|
610
|
+
def get_member_field_by_index(index)
|
611
|
+
count = get_member_count
|
612
|
+
index += count if index < 0
|
613
|
+
return nil if index >= count || index < 0
|
614
|
+
BTField.from_handle(
|
615
|
+
Babeltrace2.bt_field_structure_borrow_member_field_by_index(@handle, index))
|
616
|
+
end
|
617
|
+
|
618
|
+
def get_member_field_by_name(name)
|
619
|
+
name = name.inspect if name.kind_of?(Symbol)
|
620
|
+
handle = Babeltrace2.bt_field_structure_borrow_member_field_by_name(@handle, name)
|
621
|
+
return nil if handle.null?
|
622
|
+
BTField.from_handle(handle)
|
623
|
+
end
|
624
|
+
|
625
|
+
def get_member_field(member_field)
|
626
|
+
case member_field
|
627
|
+
when ::String, Symbol
|
628
|
+
get_member_field_by_name(member_field)
|
629
|
+
when ::Integer
|
630
|
+
get_member_field_by_index(member_field)
|
631
|
+
else
|
632
|
+
raise TypeError, "wrong type for member field query"
|
633
|
+
end
|
634
|
+
end
|
635
|
+
alias [] get_member_field
|
636
|
+
|
637
|
+
def each
|
638
|
+
if block_given?
|
639
|
+
get_member_count.times { |i|
|
640
|
+
yield get_member_field_by_index(i)
|
641
|
+
}
|
642
|
+
else
|
643
|
+
to_enum(:each)
|
644
|
+
end
|
645
|
+
end
|
646
|
+
|
647
|
+
def value
|
648
|
+
v = {}
|
649
|
+
klass = get_class
|
650
|
+
get_member_count.times { |i|
|
651
|
+
v[klass.get_member_by_index(i).name] = get_member_field_by_index(i).value
|
652
|
+
}
|
653
|
+
v
|
654
|
+
end
|
655
|
+
|
656
|
+
def to_s
|
657
|
+
s = "{"
|
658
|
+
klass = get_class
|
659
|
+
s << get_member_count.times.collect { |i|
|
660
|
+
name = klass.get_member_by_index(i).name
|
661
|
+
name = name.inspect if name.kind_of?(Symbol)
|
662
|
+
"#{name}: #{get_member_field_by_index(i)}"
|
663
|
+
}.join(", ")
|
664
|
+
s << "}"
|
665
|
+
end
|
666
|
+
end
|
667
|
+
BTFieldStructure = BTField::Structure
|
668
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_STRUCTURE] = [
|
669
|
+
BTFieldStructureHandle,
|
670
|
+
BTFieldStructure ]
|
671
|
+
|
672
|
+
attach_function :bt_field_option_set_has_field,
|
673
|
+
[ :bt_field_option_handle, :bt_bool ],
|
674
|
+
:void
|
675
|
+
|
676
|
+
attach_function :bt_field_option_borrow_field,
|
677
|
+
[ :bt_field_option_handle ],
|
678
|
+
:bt_field_handle
|
679
|
+
|
680
|
+
attach_function :bt_field_option_borrow_field_const,
|
681
|
+
[ :bt_field_option_handle ],
|
682
|
+
:bt_field_handle
|
683
|
+
|
684
|
+
class BTField::Option < BTField
|
685
|
+
def set_has_field(has_field)
|
686
|
+
Babeltrace2.bt_field_option_set_has_field(@handle, has_field ? BT_TRUE : BT_FALSE)
|
687
|
+
self
|
688
|
+
end
|
689
|
+
|
690
|
+
def has_field=(has_field)
|
691
|
+
set_has_field(has_field)
|
692
|
+
has_field
|
693
|
+
end
|
694
|
+
|
695
|
+
def get_field
|
696
|
+
handle = Babeltrace2.bt_field_option_borrow_field(@handle)
|
697
|
+
return nil if handle.null?
|
698
|
+
BTField.from_handle(handle)
|
699
|
+
end
|
700
|
+
alias field get_field
|
701
|
+
|
702
|
+
def value
|
703
|
+
f = get_field
|
704
|
+
return nil unless f
|
705
|
+
f.value
|
706
|
+
end
|
707
|
+
|
708
|
+
def to_s
|
709
|
+
get_field.to_s
|
710
|
+
end
|
711
|
+
end
|
712
|
+
BTFieldOption = BTField::Option
|
713
|
+
|
714
|
+
class BTField::Option::WithoutSelectorField < BTField::Option
|
715
|
+
end
|
716
|
+
BTFieldOptionWithoutSelectorField = BTField::Option::WithoutSelectorField
|
717
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD] = [
|
718
|
+
BTFieldOptionWithoutSelectorFieldHandle,
|
719
|
+
BTFieldOptionWithoutSelectorField ]
|
720
|
+
|
721
|
+
class BTField::Option::WithSelectorField < BTField::Option
|
722
|
+
end
|
723
|
+
BTFieldOptionWithSelectorField = BTField::Option::WithSelectorField
|
724
|
+
|
725
|
+
class BTField::Option::WithSelectorField::Bool < BTField::Option::WithSelectorField
|
726
|
+
end
|
727
|
+
BTFieldOptionWithSelectorFieldBool = BTField::Option::WithSelectorField::Bool
|
728
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD] = [
|
729
|
+
BTFieldOptionWithSelectorFieldBoolHandle,
|
730
|
+
BTFieldOptionWithSelectorFieldBool ]
|
731
|
+
|
732
|
+
class BTField::Option::WithSelectorField::IntegerUnsigned < BTField::Option::WithSelectorField
|
733
|
+
end
|
734
|
+
BTFieldOptionWithSelectorFieldIntegerUnsigned = BTField::Option::WithSelectorField::IntegerUnsigned
|
735
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD] = [
|
736
|
+
BTFieldOptionWithSelectorFieldIntegerUnsignedHandle,
|
737
|
+
BTFieldOptionWithSelectorFieldIntegerUnsigned ]
|
738
|
+
|
739
|
+
class BTField::Option::WithSelectorField::IntegerSigned < BTField::Option::WithSelectorField
|
740
|
+
end
|
741
|
+
BTFieldOptionWithSelectorFieldIntegerSigned = BTField::Option::WithSelectorField::IntegerSigned
|
742
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD] = [
|
743
|
+
BTFieldOptionWithSelectorFieldIntegerSignedHandle,
|
744
|
+
BTFieldOptionWithSelectorFieldIntegerSigned ]
|
745
|
+
|
746
|
+
BT_FIELD_VARIANT_SELECT_OPTION_STATUS_OK = BT_FUNC_STATUS_OK
|
747
|
+
BTFieldVariantSelectOptionByIndexStatus =
|
748
|
+
enum :bt_field_variant_select_option_by_index_status,
|
749
|
+
[ :BT_FIELD_VARIANT_SELECT_OPTION_STATUS_OK,
|
750
|
+
BT_FIELD_VARIANT_SELECT_OPTION_STATUS_OK ]
|
751
|
+
|
752
|
+
attach_function :bt_field_variant_select_option_by_index,
|
753
|
+
[ :bt_field_variant_handle, :uint64 ],
|
754
|
+
:bt_field_variant_select_option_by_index_status
|
755
|
+
|
756
|
+
attach_function :bt_field_variant_borrow_selected_option_field,
|
757
|
+
[ :bt_field_variant_handle ],
|
758
|
+
:bt_field_handle
|
759
|
+
|
760
|
+
attach_function :bt_field_variant_borrow_selected_option_field_const,
|
761
|
+
[ :bt_field_variant_handle ],
|
762
|
+
:bt_field_handle
|
763
|
+
|
764
|
+
attach_function :bt_field_variant_get_selected_option_index,
|
765
|
+
[ :bt_field_variant_handle ],
|
766
|
+
:uint64
|
767
|
+
|
768
|
+
attach_function :bt_field_variant_borrow_selected_option_class_const,
|
769
|
+
[ :bt_field_variant_handle ],
|
770
|
+
:bt_field_class_variant_option_handle
|
771
|
+
|
772
|
+
class BTField::Variant < BTField
|
773
|
+
def get_option_count
|
774
|
+
@option_count ||= get_class.get_option_count
|
775
|
+
end
|
776
|
+
alias option_count get_option_count
|
777
|
+
|
778
|
+
def select_option_by_index(index)
|
779
|
+
count = get_option_count
|
780
|
+
index += count if index < 0
|
781
|
+
raise "invalid index" if index >= count || index < 0
|
782
|
+
res = Babeltrace2.bt_field_variant_select_option_by_index(@handle, index)
|
783
|
+
raise Babeltrace2.process_error(res) if res != :BT_FIELD_VARIANT_SELECT_OPTION_STATUS_OK
|
784
|
+
self
|
785
|
+
end
|
786
|
+
|
787
|
+
def get_selected_option_field
|
788
|
+
handle = Babeltrace2.bt_field_variant_borrow_selected_option_field(@handle)
|
789
|
+
return nil if handle.null?
|
790
|
+
BTField.from_handle(handle)
|
791
|
+
end
|
792
|
+
alias selected_option_field get_selected_option_field
|
793
|
+
|
794
|
+
def get_selected_option_index
|
795
|
+
Babeltrace2.bt_field_variant_get_selected_option_index(@handle)
|
796
|
+
end
|
797
|
+
alias selected_option_index get_selected_option_index
|
798
|
+
|
799
|
+
def get_selected_option_class
|
800
|
+
handle = Babeltrace2.bt_field_variant_borrow_selected_option_class_const(@handle)
|
801
|
+
return nil if handle.null?
|
802
|
+
BTFieldClassVariantOption.new(handle)
|
803
|
+
end
|
804
|
+
alias selected_option_class get_selected_option_class
|
805
|
+
|
806
|
+
def value
|
807
|
+
f = get_selected_option_field
|
808
|
+
return nil unless f
|
809
|
+
{ selected_option_class.name => f.value }
|
810
|
+
end
|
811
|
+
|
812
|
+
def to_s
|
813
|
+
s = "{"
|
814
|
+
opt = get_selected_option_field
|
815
|
+
if opt
|
816
|
+
name = selected_option_class.name
|
817
|
+
name = name.inspect if name.kind_of?(Symbol)
|
818
|
+
s << "#{name}: #{opt.to_s}"
|
819
|
+
end
|
820
|
+
s << "}"
|
821
|
+
end
|
822
|
+
end
|
823
|
+
BTFieldVariant = BTField::Variant
|
824
|
+
|
825
|
+
class BTField::Variant::WithoutSelectorField < BTField::Variant
|
826
|
+
end
|
827
|
+
BTFieldVariantWithoutSelectorField = BTField::Variant::WithoutSelectorField
|
828
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD] = [
|
829
|
+
BTFieldVariantWithoutSelectorFieldHandle,
|
830
|
+
BTFieldVariantWithoutSelectorField ]
|
831
|
+
|
832
|
+
class BTField::Variant::WithSelectorField < BTField::Variant
|
833
|
+
end
|
834
|
+
BTFieldVariantWithSelectorField = BTField::Variant::WithSelectorField
|
835
|
+
|
836
|
+
attach_function :bt_field_variant_with_selector_field_integer_unsigned_borrow_selected_option_class_const,
|
837
|
+
[ :bt_field_variant_with_selector_field_integer_unsigned_handle ],
|
838
|
+
:bt_field_class_variant_with_selector_field_integer_unsigned_option_handle
|
839
|
+
|
840
|
+
class BTField::Variant::WithSelectorField::IntegerUnsigned <
|
841
|
+
BTField::Variant::WithSelectorField
|
842
|
+
def get_selected_option_class
|
843
|
+
handle = Babeltrace2.bt_field_variant_with_selector_field_integer_unsigned_borrow_selected_option_class_const(@handle)
|
844
|
+
return nil if handle.null?
|
845
|
+
BTFieldClassVariantWithSelectorFieldIntegerUnsignedOption.new(handle)
|
846
|
+
end
|
847
|
+
alias selected_option_class get_selected_option_class
|
848
|
+
end
|
849
|
+
BTFieldVariantWithSelectorFieldIntegerUnsigned = BTField::Variant::WithSelectorField::IntegerUnsigned
|
850
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD] = [
|
851
|
+
BTFieldVariantWithSelectorFieldIntegerUnsignedHandle,
|
852
|
+
BTFieldVariantWithSelectorFieldIntegerUnsigned ]
|
853
|
+
|
854
|
+
attach_function :bt_field_variant_with_selector_field_integer_signed_borrow_selected_option_class_const,
|
855
|
+
[ :bt_field_variant_with_selector_field_integer_signed_handle ],
|
856
|
+
:bt_field_class_variant_with_selector_field_integer_signed_option_handle
|
857
|
+
|
858
|
+
class BTField::Variant::WithSelectorField::IntegerSigned <
|
859
|
+
BTField::Variant::WithSelectorField
|
860
|
+
def get_selected_option_class
|
861
|
+
handle = Babeltrace2.bt_field_variant_with_selector_field_integer_signed_borrow_selected_option_class_const(@handle)
|
862
|
+
return nil if handle.null?
|
863
|
+
BTFieldClassVariantWithSelectorFieldIntegerSignedOption.new(handle)
|
864
|
+
end
|
865
|
+
alias selected_option_class get_selected_option_class
|
866
|
+
end
|
867
|
+
BTFieldVariantWithSelectorFieldIntegerSigned = BTField::Variant::WithSelectorField::IntegerSigned
|
868
|
+
BTField::TYPE_MAP[:BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD] = [
|
869
|
+
BTFieldVariantWithSelectorFieldIntegerSignedHandle,
|
870
|
+
BTFieldVariantWithSelectorFieldIntegerSigned ]
|
871
|
+
end
|