+
+ return fs_writer;
+}
+
+static
+struct fs_writer *get_fs_writer_from_stream(
+ struct writer_component *writer_component,
+ struct bt_ctf_stream *stream)
+{
+ struct bt_ctf_stream_class *stream_class = NULL;
+ struct fs_writer *fs_writer;
+
+ stream_class = bt_ctf_stream_get_class(stream);
+ assert(stream_class);
+
+ fs_writer = get_fs_writer(writer_component, stream_class);
+
+ bt_put(stream_class);
+ return fs_writer;
+}
+
+static
+struct bt_ctf_stream_class *lookup_stream_class(
+ struct writer_component *writer_component,
+ struct bt_ctf_stream_class *stream_class)
+{
+ struct fs_writer *fs_writer = get_fs_writer(
+ writer_component, stream_class);
+ assert(fs_writer);
+ return (struct bt_ctf_stream_class *) g_hash_table_lookup(
+ fs_writer->stream_class_map, (gpointer) stream_class);
+}
+
+static
+struct bt_ctf_stream *lookup_stream(struct writer_component *writer_component,
+ struct bt_ctf_stream *stream)
+{
+ struct fs_writer *fs_writer = get_fs_writer_from_stream(
+ writer_component, stream);
+ assert(fs_writer);
+ return (struct bt_ctf_stream *) g_hash_table_lookup(
+ fs_writer->stream_map, (gpointer) stream);
+}
+
+static
+struct bt_ctf_stream *insert_new_stream(
+ struct writer_component *writer_component,
+ struct fs_writer *fs_writer,
+ struct bt_ctf_stream_class *stream_class,
+ struct bt_ctf_stream *stream)
+{
+ struct bt_ctf_stream *writer_stream = NULL;
+ struct bt_ctf_stream_class *writer_stream_class = NULL;
+ struct bt_ctf_writer *ctf_writer = bt_get(fs_writer->writer);
+
+ writer_stream_class = lookup_stream_class(writer_component,
+ stream_class);
+ if (!writer_stream_class) {
+ writer_stream_class = insert_new_stream_class(
+ writer_component, fs_writer, stream_class);
+ if (!writer_stream_class) {
+ BT_LOGE_STR("Failed to insert a new stream_class.");
+ goto error;
+ }
+ }
+ bt_get(writer_stream_class);
+
+ writer_stream = bt_ctf_stream_create(writer_stream_class,
+ bt_ctf_stream_get_name(stream));
+ assert(writer_stream);
+
+ g_hash_table_insert(fs_writer->stream_map, (gpointer) stream,
+ writer_stream);
+