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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/babeltrace2.gemspec +13 -0
  4. data/lib/babeltrace2.rb +49 -0
  5. data/lib/babeltrace2/error-reporting.rb +432 -0
  6. data/lib/babeltrace2/func-status.rb +26 -0
  7. data/lib/babeltrace2/graph/component-class-dev.rb +801 -0
  8. data/lib/babeltrace2/graph/component-class.rb +134 -0
  9. data/lib/babeltrace2/graph/component-descriptor-set.rb +78 -0
  10. data/lib/babeltrace2/graph/component.rb +362 -0
  11. data/lib/babeltrace2/graph/connection.rb +35 -0
  12. data/lib/babeltrace2/graph/graph.rb +523 -0
  13. data/lib/babeltrace2/graph/interrupter.rb +57 -0
  14. data/lib/babeltrace2/graph/message-iterator-class.rb +374 -0
  15. data/lib/babeltrace2/graph/message-iterator.rb +253 -0
  16. data/lib/babeltrace2/graph/message.rb +721 -0
  17. data/lib/babeltrace2/graph/port.rb +124 -0
  18. data/lib/babeltrace2/graph/private-query-executor.rb +4 -0
  19. data/lib/babeltrace2/graph/query-executor.rb +142 -0
  20. data/lib/babeltrace2/graph/self-component-class.rb +37 -0
  21. data/lib/babeltrace2/graph/self-component-port.rb +35 -0
  22. data/lib/babeltrace2/graph/self-component.rb +264 -0
  23. data/lib/babeltrace2/graph/self-message-iterator.rb +147 -0
  24. data/lib/babeltrace2/integer-range-set.rb +275 -0
  25. data/lib/babeltrace2/logging-defs.rb +19 -0
  26. data/lib/babeltrace2/logging.rb +77 -0
  27. data/lib/babeltrace2/plugin/plugin-dev.rb +335 -0
  28. data/lib/babeltrace2/plugin/plugin-loading.rb +459 -0
  29. data/lib/babeltrace2/trace-ir/clock-class.rb +258 -0
  30. data/lib/babeltrace2/trace-ir/clock-snapshot.rb +45 -0
  31. data/lib/babeltrace2/trace-ir/event-class.rb +292 -0
  32. data/lib/babeltrace2/trace-ir/event.rb +91 -0
  33. data/lib/babeltrace2/trace-ir/field-class.rb +1416 -0
  34. data/lib/babeltrace2/trace-ir/field-path.rb +123 -0
  35. data/lib/babeltrace2/trace-ir/field.rb +871 -0
  36. data/lib/babeltrace2/trace-ir/packet.rb +57 -0
  37. data/lib/babeltrace2/trace-ir/stream-class.rb +425 -0
  38. data/lib/babeltrace2/trace-ir/stream.rb +137 -0
  39. data/lib/babeltrace2/trace-ir/trace-class.rb +343 -0
  40. data/lib/babeltrace2/trace-ir/trace.rb +321 -0
  41. data/lib/babeltrace2/types.rb +667 -0
  42. data/lib/babeltrace2/util.rb +23 -0
  43. data/lib/babeltrace2/value.rb +869 -0
  44. data/lib/babeltrace2/version.rb +126 -0
  45. metadata +105 -0
@@ -0,0 +1,124 @@
1
+ module Babeltrace2
2
+
3
+ BT_PORT_TYPE_INPUT = 1 << 0
4
+ BT_PORT_TYPE_OUTPUT = 1 << 1
5
+ BTPortType = enum :bt_port_type,
6
+ [ :BT_PORT_TYPE_INPUT,
7
+ BT_PORT_TYPE_INPUT,
8
+ :BT_PORT_TYPE_OUTPUT,
9
+ BT_PORT_TYPE_OUTPUT ]
10
+
11
+ attach_function :bt_port_get_type,
12
+ [ :bt_port_handle ],
13
+ :bt_port_type
14
+
15
+ attach_function :bt_port_borrow_connection_const,
16
+ [ :bt_port_handle ],
17
+ :bt_connection_handle
18
+
19
+ attach_function :bt_port_borrow_component_const,
20
+ [ :bt_port_handle ],
21
+ :bt_component_handle
22
+
23
+ attach_function :bt_port_get_name,
24
+ [ :bt_port_handle ],
25
+ :string
26
+
27
+ attach_function :bt_port_is_connected,
28
+ [ :bt_port_handle ],
29
+ :bt_bool
30
+
31
+ attach_function :bt_port_get_ref,
32
+ [ :bt_port_handle ],
33
+ :void
34
+
35
+ attach_function :bt_port_put_ref,
36
+ [ :bt_port_handle ],
37
+ :void
38
+
39
+ class BTPort < BTSharedObject
40
+ Type = BTPortType
41
+ @get_ref = :bt_port_get_ref
42
+ @put_ref = :bt_port_put_ref
43
+
44
+ def self.from_handle(handle, retain: true, auto_release: true)
45
+ case Babeltrace2.bt_port_get_type(handle)
46
+ when :BT_PORT_TYPE_INPUT
47
+ handle = BTPortInputHandle.new(handle)
48
+ BTPortInput
49
+ when :BT_PORT_TYPE_OUTPUT
50
+ handle = BTPortOuputHandle.new(handle)
51
+ BTPortOutput
52
+ else
53
+ raise Error.new("Unknown port type")
54
+ end.new(handle, retain: retain, auto_release: auto_release)
55
+ end
56
+
57
+ def get_type
58
+ Babeltrace2.bt_port_get_type(@handle)
59
+ end
60
+ alias type get_type
61
+
62
+ def is_input
63
+ get_type == :BT_PORT_TYPE_INPUT
64
+ end
65
+ alias input? is_input
66
+
67
+ def is_output
68
+ get_type == :BT_PORT_TYPE_OUTPUT
69
+ end
70
+ alias output? is_output
71
+
72
+ def get_connection
73
+ handle = Babeltrace2.bt_port_borrow_connection_const(@handle)
74
+ return nil if handle.null?
75
+ BTConnection.new(handle, retain: true, auto_release: true)
76
+ end
77
+ alias connection get_connection
78
+
79
+ def get_component
80
+ handle = Babeltrace2.bt_port_borrow_component_const(@handle)
81
+ BTComponent.from_handle(handle)
82
+ end
83
+ alias component get_component
84
+
85
+ def get_name
86
+ Babeltrace2.bt_port_get_name(@handle)
87
+ end
88
+ alias name get_name
89
+
90
+ def is_connected
91
+ Babeltrace2.bt_port_is_connected(@handle) != BT_FALSE
92
+ end
93
+ alias connected? is_connected
94
+ end
95
+
96
+ attach_function :bt_port_input_get_ref,
97
+ [ :bt_port_input_handle ],
98
+ :void
99
+
100
+ attach_function :bt_port_input_put_ref,
101
+ [ :bt_port_input_handle ],
102
+ :void
103
+
104
+ class BTPort::Input < BTPort
105
+ @get_ref = :bt_port_input_get_ref
106
+ @put_ref = :bt_port_input_put_ref
107
+ end
108
+ BTPortInput = BTPort::Input
109
+
110
+ attach_function :bt_port_output_get_ref,
111
+ [ :bt_port_output_handle ],
112
+ :void
113
+
114
+ attach_function :bt_port_output_put_ref,
115
+ [ :bt_port_output_handle ],
116
+ :void
117
+
118
+ class BTPort::Output < BTPort
119
+ @get_ref = :bt_port_output_get_ref
120
+ @put_ref = :bt_port_output_put_ref
121
+ end
122
+ BTPortOutput = BTPort::Output
123
+
124
+ end
@@ -0,0 +1,4 @@
1
+ module Babeltrace2
2
+ class BTPrivateQueryExecutor < BTQueryExecutor
3
+ end
4
+ end
@@ -0,0 +1,142 @@
1
+ module Babeltrace2
2
+
3
+ attach_function :bt_query_executor_create,
4
+ [ :bt_component_class_handle,
5
+ :string, :bt_value_handle ],
6
+ :bt_query_executor_handle
7
+
8
+ attach_function :bt_query_executor_create_with_method_data,
9
+ [ :bt_component_class_handle,
10
+ :string, :bt_value_handle, :pointer ],
11
+ :bt_query_executor_handle
12
+
13
+ BT_QUERY_EXECUTOR_QUERY_STATUS_OK = BT_FUNC_STATUS_OK
14
+ BT_QUERY_EXECUTOR_QUERY_STATUS_UNKNOWN_OBJECT = BT_FUNC_STATUS_UNKNOWN_OBJECT
15
+ BT_QUERY_EXECUTOR_QUERY_STATUS_AGAIN = BT_FUNC_STATUS_AGAIN
16
+ BT_QUERY_EXECUTOR_QUERY_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
17
+ BT_QUERY_EXECUTOR_QUERY_STATUS_ERROR = BT_FUNC_STATUS_ERROR
18
+ BTQueryExecutorQueryStatus = enum :bt_query_executor_query_status,
19
+ [ :BT_QUERY_EXECUTOR_QUERY_STATUS_OK,
20
+ BT_QUERY_EXECUTOR_QUERY_STATUS_OK,
21
+ :BT_QUERY_EXECUTOR_QUERY_STATUS_UNKNOWN_OBJECT,
22
+ BT_QUERY_EXECUTOR_QUERY_STATUS_UNKNOWN_OBJECT,
23
+ :BT_QUERY_EXECUTOR_QUERY_STATUS_AGAIN,
24
+ BT_QUERY_EXECUTOR_QUERY_STATUS_AGAIN,
25
+ :BT_QUERY_EXECUTOR_QUERY_STATUS_MEMORY_ERROR,
26
+ BT_QUERY_EXECUTOR_QUERY_STATUS_MEMORY_ERROR,
27
+ :BT_QUERY_EXECUTOR_QUERY_STATUS_ERROR,
28
+ BT_QUERY_EXECUTOR_QUERY_STATUS_ERROR ]
29
+
30
+ attach_function :bt_query_executor_query,
31
+ [ :bt_query_executor_handle,
32
+ :pointer ],
33
+ :bt_query_executor_query_status
34
+
35
+ BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK = BT_FUNC_STATUS_OK
36
+ BTQueryExecutorSetLoggingLevelStatus = enum :bt_query_executor_set_logging_level_status,
37
+ [ :BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK,
38
+ BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK ]
39
+
40
+ attach_function :bt_query_executor_set_logging_level,
41
+ [ :bt_query_executor_handle,
42
+ :bt_logging_level ],
43
+ :bt_query_executor_set_logging_level_status
44
+
45
+ attach_function :bt_query_executor_get_logging_level,
46
+ [ :bt_query_executor_handle ],
47
+ :bt_logging_level
48
+
49
+ BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_OK = BT_FUNC_STATUS_OK
50
+ BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
51
+ BTQueryExecutorAddInterrupterStatus = enum :bt_query_executor_add_interrupter_status,
52
+ [ :BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_OK,
53
+ BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_OK,
54
+ :BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_MEMORY_ERROR,
55
+ BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_MEMORY_ERROR ]
56
+
57
+ attach_function :bt_query_executor_add_interrupter,
58
+ [ :bt_query_executor_handle,
59
+ :bt_interrupter_handle ],
60
+ :bt_query_executor_add_interrupter_status
61
+
62
+ attach_function :bt_query_executor_borrow_default_interrupter,
63
+ [ :bt_query_executor_handle ],
64
+ :bt_interrupter_handle
65
+
66
+ attach_function :bt_query_executor_is_interrupted,
67
+ [ :bt_query_executor_handle ],
68
+ :bt_bool
69
+
70
+ attach_function :bt_query_executor_get_ref,
71
+ [ :bt_query_executor_handle ],
72
+ :void
73
+
74
+ attach_function :bt_query_executor_put_ref,
75
+ [ :bt_query_executor_handle ],
76
+ :void
77
+
78
+ class BTQueryExecutor < BTSharedObject
79
+ QueryStatus = BTQueryExecutorQueryStatus
80
+ SetLoggingLevelStatus = BTQueryExecutorSetLoggingLevelStatus
81
+ AddInterrupterStatus = BTQueryExecutorAddInterrupterStatus
82
+ @get_ref = :bt_query_executor_get_ref
83
+ @put_ref = :bt_query_executor_put_ref
84
+
85
+ def initialize(handle = nil, retain: true, auto_release: true,
86
+ component_class: nil, object_name: nil, params: nil, method_data: nil)
87
+ if handle
88
+ super(handle, retain: retain, auto_release: auto_release)
89
+ else
90
+ handle = Babeltrace2.bt_query_executor_create_with_method_data(
91
+ component_class, object_name, BTValue.from_value(params), method_data)
92
+ raise Babeltrace2.process_error if handle.null?
93
+ super(handle)
94
+ end
95
+ end
96
+
97
+ def query
98
+ ptr = FFI::MemoryPointer.new(:pointer)
99
+ while ((res = Babeltrace2.bt_query_executor_query(@handle, ptr)) == :BT_QUERY_EXECUTOR_QUERY_STATUS_AGAIN)
100
+ raise "interrupted by user" if interrupted?
101
+ sleep BT_SLEEP_TIME
102
+ end
103
+ raise Babeltrace2.process_error(res) if res != :BT_QUERY_EXECUTOR_QUERY_STATUS_OK
104
+ BTValue.from_handle(BTValueHandle.new(ptr.read_pointer), retain: false)
105
+ end
106
+
107
+ def set_logging_level(logging_level)
108
+ res = Babeltrace2.bt_query_executor_set_logging_level(@handle, logging_level)
109
+ raise Babeltrace2.process_error(res) if res != :BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK
110
+ self
111
+ end
112
+
113
+ def logging_level=(logging_level)
114
+ res = Babeltrace2.bt_query_executor_set_logging_level(@handle, logging_level)
115
+ raise Babeltrace2.process_error(res) if res != :BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK
116
+ return logging_level
117
+ end
118
+
119
+ def get_logging_level
120
+ Babeltrace2.bt_query_executor_get_logging_level(@handle)
121
+ end
122
+ alias logging_level get_logging_level
123
+
124
+ def add_interrupter(interrupter)
125
+ res = Babeltrace2.bt_query_executor_add_interrupter(@handle, interrupter)
126
+ raise Babeltrace2.process_error(res) if res != :BT_QUERY_EXECUTOR_ADD_INTERRUPTER_STATUS_OK
127
+ self
128
+ end
129
+
130
+ def get_default_interrupter
131
+ handle = Babeltrace2.bt_query_executor_borrow_default_interrupter(@handle)
132
+ BTInterrupter.new(handle, retain: true)
133
+ end
134
+ alias default_interrupter get_default_interrupter
135
+
136
+ def is_interrupted
137
+ Babeltrace2.bt_query_executor_is_interrupted(@handle) != BT_FALSE
138
+ end
139
+ alias interrupted? is_interrupted
140
+ end
141
+
142
+ end
@@ -0,0 +1,37 @@
1
+ module Babeltrace2
2
+ module BTSelfComponent
3
+ module Class
4
+ def self.from_handle(handle, retain: true, auto_release: true)
5
+ case Babeltrace2.bt_component_class_get_type(handle)
6
+ when :BT_COMPONENT_CLASS_TYPE_SOURCE
7
+ handle = BTSelfComponentClassSourceHandle.new(handle)
8
+ BTSelfComponentClassSource
9
+ when :BT_COMPONENT_CLASS_TYPE_FILTER
10
+ handle = BTSelfComponentClassFilterHandle.new(handle)
11
+ BTSelfComponentClassFilter
12
+ when :BT_COMPONENT_CLASS_TYPE_SINK
13
+ handle = BTSelfComponentClassSinkHandle.new(handle)
14
+ BTSelfComponentClassSink
15
+ else
16
+ raise Error.new("Unknown component class type")
17
+ end.new(handle, retain: retain, auto_release: auto_release)
18
+ end
19
+ end
20
+ end
21
+ BTSelfComponentClass = BTSelfComponent::Class
22
+
23
+ class BTSelfComponent::Class::Source < BTComponentClassSource
24
+ include BTSelfComponent::Class
25
+ end
26
+ BTSelfComponentClassSource = BTSelfComponent::Class::Source
27
+
28
+ class BTSelfComponent::Class::Filter < BTComponentClassFilter
29
+ include BTSelfComponent::Class
30
+ end
31
+ BTSelfComponentClassFilter = BTSelfComponent::Class::Filter
32
+
33
+ class BTSelfComponent::Class::Sink < BTComponentClassSink
34
+ include BTSelfComponent::Class
35
+ end
36
+ BTSelfComponentClassSink = BTSelfComponent::Class::Sink
37
+ end
@@ -0,0 +1,35 @@
1
+ module Babeltrace2
2
+
3
+ attach_function :bt_self_component_port_borrow_component,
4
+ [ :bt_self_component_port_handle ],
5
+ :bt_self_component_handle
6
+
7
+ attach_function :bt_self_component_port_get_data,
8
+ [ :bt_self_component_port_handle ],
9
+ :pointer
10
+
11
+ module BTSelfComponent
12
+ module Port
13
+ def get_component
14
+ handle = Babeltrace2.bt_self_component_port_borrow_component(@handle)
15
+ BTSelfComponent.from_handle(handle)
16
+ end
17
+ alias component get_component
18
+
19
+ def get_data
20
+ Babeltrace2.bt_self_component_port_get_data(@handle)
21
+ end
22
+ alias data get_data
23
+ end
24
+ end
25
+
26
+ class BTSelfComponent::Port::Input < BTPort::Input
27
+ include BTSelfComponent::Port
28
+ end
29
+ BTSelfComponentPortInput = BTSelfComponent::Port::Input
30
+
31
+ class BTSelfComponent::Port::Output < BTPort::Output
32
+ include BTSelfComponent::Port
33
+ end
34
+ BTSelfComponentPortOutput = BTSelfComponent::Port::Output
35
+ end
@@ -0,0 +1,264 @@
1
+ module Babeltrace2
2
+
3
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_OK = BT_FUNC_STATUS_OK
4
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR = BT_FUNC_STATUS_MEMORY_ERROR
5
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR = BT_FUNC_STATUS_ERROR
6
+ BTSelfComponentAddPortStatus = enum :bt_self_component_add_port_status,
7
+ [ :BT_SELF_COMPONENT_ADD_PORT_STATUS_OK,
8
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_OK,
9
+ :BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR,
10
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR,
11
+ :BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR,
12
+ BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR ]
13
+
14
+ attach_function :bt_self_component_get_data,
15
+ [ :bt_self_component_handle ],
16
+ :pointer
17
+
18
+ attach_function :bt_self_component_set_data,
19
+ [ :bt_self_component_handle,
20
+ :pointer ],
21
+ :void
22
+
23
+ attach_function :bt_self_component_get_graph_mip_version,
24
+ [ :bt_self_component_handle ],
25
+ :uint64
26
+
27
+ module BTSelfComponent
28
+ AddPortStatus = BTSelfComponentAddPortStatus
29
+
30
+ def self.from_handle(handle, retain: true, auto_release: true)
31
+ case Babeltrace2.bt_component_get_class_type(handle)
32
+ when :BT_COMPONENT_CLASS_TYPE_SOURCE
33
+ handle = BTSelfComponentSourceHandle.new(handle)
34
+ BTSelfComponentSource
35
+ when :BT_COMPONENT_CLASS_TYPE_FILTER
36
+ handle = BTSelfComponentFilterHandle.new(handle)
37
+ BTSelfComponentFilter
38
+ when :BT_COMPONENT_CLASS_TYPE_SINK
39
+ handle = BTSelfComponentSinkHandle.new(handle)
40
+ BTSelfComponentSink
41
+ else
42
+ raise Error.new("Unknown component class type")
43
+ end.new(handle, retain: retain, auto_release: auto_release)
44
+ end
45
+
46
+ def set_data(user_data)
47
+ Babeltrace2.bt_self_component_set_data(@handle, user_data)
48
+ self
49
+ end
50
+
51
+ def data=(user_data)
52
+ set_data(user_data)
53
+ user_data
54
+ end
55
+
56
+ def get_data
57
+ Babeltrace2.bt_self_component_get_data(@handle)
58
+ end
59
+ alias data get_data
60
+
61
+ def get_graph_mip_version
62
+ Babeltrace2.bt_self_component_get_graph_mip_version(@handle)
63
+ end
64
+ alias graph_mip_version get_graph_mip_version
65
+
66
+ def create_trace_class
67
+ BTTraceClass.new(self_component: @handle)
68
+ end
69
+
70
+ def create_clock_class
71
+ BTClockClass.new(self_component: @handle)
72
+ end
73
+ end
74
+
75
+ attach_function :bt_self_component_source_add_output_port,
76
+ [ :bt_self_component_source_handle,
77
+ :string, :pointer,
78
+ :pointer ],
79
+ :bt_self_component_add_port_status
80
+
81
+ attach_function :bt_self_component_source_borrow_output_port_by_index,
82
+ [ :bt_self_component_source_handle,
83
+ :uint64 ],
84
+ :bt_self_component_port_output_handle
85
+
86
+ attach_function :bt_self_component_source_borrow_output_port_by_name,
87
+ [ :bt_self_component_source_handle,
88
+ :string ],
89
+ :bt_self_component_port_output_handle
90
+
91
+ class BTSelfComponent::Source < BTComponent::Source
92
+ include BTSelfComponent
93
+ class Configuration < BTObject
94
+ end
95
+
96
+ def add_output_port(name, user_data: nil)
97
+ ptr = FFI::MemoryPointer.new(:pointer)
98
+ res = Babeltrace2.bt_self_component_source_add_output_port(@handle, name, user_data, ptr)
99
+ raise Babeltrace2.process_error(res) if res != :BT_SELF_COMPONENT_ADD_PORT_STATUS_OK
100
+ BTSelfComponentPortOutput.new(BTSelfComponentPortOutputHandle.new(ptr.read_pointer),
101
+ retain: false, auto_release: false)
102
+ end
103
+
104
+ def get_output_port_by_index(index)
105
+ count = get_output_port_count
106
+ index += count if index < 0
107
+ return nil if index >= count || index < 0
108
+ handle = Babeltrace2.bt_self_component_source_borrow_output_port_by_index(@handle, index)
109
+ BTSelfComponentPortOutput.new(handle, retain: false, auto_release: false)
110
+ end
111
+
112
+ def get_output_port_by_name(name)
113
+ handle = Babeltrace2.bt_self_component_source_borrow_output_port_by_name(@handle, name)
114
+ return nil if handle.null?
115
+ BTSelfComponentPortOutput.new(handle, retain: false, auto_release: false)
116
+ end
117
+ end
118
+ BTSelfComponentSource = BTSelfComponent::Source
119
+ BTSelfComponentSourceConfiguration = BTSelfComponent::Source::Configuration
120
+
121
+ attach_function :bt_self_component_filter_add_input_port,
122
+ [ :bt_self_component_filter_handle,
123
+ :string, :pointer,
124
+ :pointer ],
125
+ :bt_self_component_add_port_status
126
+
127
+ attach_function :bt_self_component_filter_add_output_port,
128
+ [ :bt_self_component_filter_handle,
129
+ :string, :pointer,
130
+ :pointer ],
131
+ :bt_self_component_add_port_status
132
+
133
+ attach_function :bt_self_component_filter_borrow_output_port_by_index,
134
+ [ :bt_self_component_filter_handle,
135
+ :uint64 ],
136
+ :bt_self_component_port_output_handle
137
+
138
+ attach_function :bt_self_component_filter_borrow_output_port_by_name,
139
+ [ :bt_self_component_filter_handle,
140
+ :string ],
141
+ :bt_self_component_port_output_handle
142
+
143
+ attach_function :bt_self_component_filter_borrow_input_port_by_index,
144
+ [ :bt_self_component_filter_handle,
145
+ :uint64 ],
146
+ :bt_self_component_port_input_handle
147
+
148
+ attach_function :bt_self_component_filter_borrow_input_port_by_name,
149
+ [ :bt_self_component_filter_handle,
150
+ :string ],
151
+ :bt_self_component_port_input_handle
152
+
153
+ class BTSelfComponent::Filter < BTComponent::Filter
154
+ include BTSelfComponent
155
+ class Configuration < BTObject
156
+ end
157
+
158
+ def add_output_port(name, user_data: nil)
159
+ ptr = FFI::MemoryPointer.new(:pointer)
160
+ res = Babeltrace2.bt_self_component_filter_add_output_port(@handle, name, user_data, ptr)
161
+ raise Babeltrace2.process_error(res) if res != :BT_SELF_COMPONENT_ADD_PORT_STATUS_OK
162
+ BTSelfComponentPortOutput.new(BTSelfComponentPortOutputHandle.new(ptr.read_pointer),
163
+ retain: false, auto_release: false)
164
+ end
165
+
166
+ def add_input_port(name, user_data: nil)
167
+ ptr = FFI::MemoryPointer.new(:pointer)
168
+ res = Babeltrace2.bt_self_component_filter_add_input_port(@handle, name, user_data, ptr)
169
+ raise Babeltrace2.process_error(res) if res != :BT_SELF_COMPONENT_ADD_PORT_STATUS_OK
170
+ BTSelfComponentPortInput.new(BTSelfComponentPortInputHandle.new(ptr.read_pointer),
171
+ retain: false, auto_release: false)
172
+ end
173
+
174
+ def get_output_port_by_index(index)
175
+ count = get_output_port_count
176
+ index += count if index < 0
177
+ return nil if index >= count || index < 0
178
+ handle = Babeltrace2.bt_self_component_filter_borrow_output_port_by_index(@handle, index)
179
+ BTSelfComponentPortOutput.new(handle, retain: false, auto_release: false)
180
+ end
181
+
182
+ def get_output_port_by_name(name)
183
+ handle = Babeltrace2.bt_self_component_filter_borrow_output_port_by_name(@handle, name)
184
+ return nil if handle.null?
185
+ BTSelfComponentPortOutput.new(handle, retain: false, auto_release: false)
186
+ end
187
+
188
+ def get_input_port_by_index(index)
189
+ count = get_input_port_count
190
+ index += count if index < 0
191
+ return nil if index >= count || index < 0
192
+ handle = Babeltrace2.bt_self_component_filter_borrow_input_port_by_index(@handle, index)
193
+ BTSelfComponentPortInput.new(handle, retain: false, auto_release: false)
194
+ end
195
+
196
+ def get_input_port_by_name(name)
197
+ handle = Babeltrace2.bt_self_component_filter_borrow_input_port_by_name(@handle, name)
198
+ return nil if handle.null?
199
+ BTSelfComponentPortInput.new(handle, retain: false, auto_release: false)
200
+ end
201
+ end
202
+ BTSelfComponentFilter = BTSelfComponent::Filter
203
+ BTSelfComponentFilterConfiguration = BTSelfComponent::Filter::Configuration
204
+
205
+ attach_function :bt_self_component_sink_add_input_port,
206
+ [ :bt_self_component_sink_handle,
207
+ :string, :pointer,
208
+ :pointer ],
209
+ :bt_self_component_add_port_status
210
+
211
+ attach_function :bt_self_component_sink_borrow_input_port_by_index,
212
+ [ :bt_self_component_sink_handle,
213
+ :uint64 ],
214
+ :bt_self_component_port_input_handle
215
+
216
+ attach_function :bt_self_component_sink_borrow_input_port_by_name,
217
+ [ :bt_self_component_sink_handle,
218
+ :string ],
219
+ :bt_self_component_port_input_handle
220
+
221
+ attach_function :bt_self_component_sink_is_interrupted,
222
+ [ :bt_self_component_sink_handle ],
223
+ :bt_bool
224
+
225
+ class BTSelfComponent::Sink < BTComponent::Sink
226
+ include BTSelfComponent
227
+ class Configuration < BTObject
228
+ end
229
+
230
+ def add_input_port(name, user_data: nil)
231
+ ptr = FFI::MemoryPointer.new(:pointer)
232
+ res = Babeltrace2.bt_self_component_sink_add_input_port(@handle, name, user_data, ptr)
233
+ raise Babeltrace2.process_error(res) if res != :BT_SELF_COMPONENT_ADD_PORT_STATUS_OK
234
+ BTSelfComponentPortInput.new(BTSelfComponentPortInputHandle.new(ptr.read_pointer),
235
+ retain: false, auto_release: false)
236
+ end
237
+
238
+ def get_input_port_by_index(index)
239
+ count = get_input_port_count
240
+ index += count if index < 0
241
+ return nil if index >= count || index < 0
242
+ handle = Babeltrace2.bt_self_component_sink_borrow_input_port_by_index(@handle, index)
243
+ BTSelfComponentPortInput.new(handle, retain: false, auto_release: false)
244
+ end
245
+
246
+ def get_input_port_by_name(name)
247
+ handle = Babeltrace2.bt_self_component_sink_borrow_input_port_by_name(@handle, name)
248
+ return nil if handle.null?
249
+ BTSelfComponentPortInput.new(handle, retain: false, auto_release: false)
250
+ end
251
+
252
+ def is_interrupted
253
+ Babeltrace2.bt_self_component_sink_is_interrupted(@handle) != BT_FALSE
254
+ end
255
+ alias interrupted? is_interrupted
256
+
257
+ def create_message_iterator(port)
258
+ BTMessageIterator.create_from_sink_component(self, port)
259
+ end
260
+ end
261
+ BTSelfComponentSink = BTSelfComponent::Sink
262
+ BTSelfComponentSinkConfiguration = BTSelfComponent::Sink::Configuration
263
+
264
+ end